package fhelp import ( "os" "path/filepath" ) // THIS IS THE DEFAULT: // // ~/.config/ # put things you might care about here // ~/.cache/ # this is never imporant and can be deleted at any time // // Additionally: // // NEVER WRITE OUT ANYTHING TO ~/ // NEVER EVER // func getConfigDir() (string, error) { homeDir, err := os.UserHomeDir() if err != nil { return "/tmp", err } fullpath := filepath.Join(homeDir, ".config/forge") err = os.MkdirAll(fullpath, os.ModePerm) if err != nil { return "/tmp", err } return fullpath, nil } func getCacheDir() (string, error) { homeDir, err := os.UserHomeDir() if err != nil { return "/tmp", err } fullpath := filepath.Join(homeDir, ".cache/forge") err = os.MkdirAll(fullpath, os.ModePerm) if err != nil { return "/tmp", err } return fullpath, nil } func getReposDir() (string, error) { homeDir, err := os.UserHomeDir() if err != nil { return "/tmp", err } fullpath := filepath.Join(homeDir, "go/src") err = os.MkdirAll(fullpath, os.ModePerm) if err != nil { return "/tmp", err } return fullpath, nil } func getCachegDir() (string, error) { homeDir, err := os.UserHomeDir() if err != nil { return "/tmp", err } fullpath := filepath.Join(homeDir, ".cache/forge") err = os.MkdirAll(fullpath, os.ModePerm) if err != nil { return "/tmp", err } return fullpath, nil } // this is the 'old way" and works fine for me. I use it because I like the ~/go/src directory // because I know exactly what is in it: GO stuff & nothing else func useGoSrc() (string, error) { homeDir, err := os.UserHomeDir() if err != nil { return "", err } pwd := filepath.Join(homeDir, "go/src") err = os.MkdirAll(pwd, os.ModePerm) return pwd, err } func GoWorkExists(dir string) bool { var err error workFilePath := filepath.Join(dir, "go.work") if _, err = os.Stat(workFilePath); err == nil { // log.Info("f.goWorkExists() found", workFilePath) return true } else if !os.IsNotExist(err) { // log.Info("f.goWorkExists() missing", workFilePath) return false } // probably false, but some other error // log.Info("f.goWorkExists() os.Stat() error", err, workFilePath) return false } // findGoWork searches for a "go.work" file starting from the current directory // and moving up the directory tree. It returns the path to the directory containing // the file and a boolean indicating whether the file was found. func FindGoWork() (string, bool) { dir, err := os.Getwd() if err != nil { return "", false } for { workFilePath := filepath.Join(dir, "go.work") if _, err := os.Stat(workFilePath); err == nil { return dir, true } parent := filepath.Dir(dir) if parent == dir { break // Reached root } dir = parent } return "", false }