github.com/mariuspot/gqlgen@v0.7.2/internal/gopath/gopath.go (about) 1 package gopath 2 3 import ( 4 "fmt" 5 "go/build" 6 "path/filepath" 7 "strings" 8 ) 9 10 var NotFound = fmt.Errorf("not on GOPATH") 11 12 // Contains returns true if the given directory is in the GOPATH 13 func Contains(dir string) bool { 14 _, err := Dir2Import(dir) 15 return err == nil 16 } 17 18 // Dir2Import takes an *absolute* path and returns a golang import path for the package, and returns an error if it isn't on the gopath 19 func Dir2Import(dir string) (string, error) { 20 dir = filepath.ToSlash(dir) 21 for _, gopath := range filepath.SplitList(build.Default.GOPATH) { 22 gopath = filepath.ToSlash(filepath.Join(gopath, "src")) 23 if len(gopath) < len(dir) && strings.EqualFold(gopath, dir[0:len(gopath)]) { 24 return dir[len(gopath)+1:], nil 25 } 26 } 27 return "", NotFound 28 } 29 30 // MustDir2Import takes an *absolute* path and returns a golang import path for the package, and panics if it isn't on the gopath 31 func MustDir2Import(dir string) string { 32 pkg, err := Dir2Import(dir) 33 if err != nil { 34 panic(err) 35 } 36 return pkg 37 }