package main import ( "io/ioutil" "path/filepath" "github.com/logrusorgru/aurora" ) func hasGo() bool { h, err := hasGoAux(".", 3) if err != nil { Warn("error scanning directory for go.mod: %v", aurora.Red(err)) return false } return h } func hasGoAux(dir string, depth int) (bool, error) { fi, err := ioutil.ReadDir(dir) if err != nil { return false, err } var dirs []string for _, f := range fi { switch { case f.Name()[0] == '.': // do nothing case f.IsDir(): dirs = append(dirs, f.Name()) case f.Name() == "go.mod": return true, nil } } if depth == 0 { return false, nil } depth-- for _, subdir := range dirs { h, err := hasGoAux(filepath.Join(dir, subdir), depth) if h || err != nil { return h, err } } return false, nil }