github.com/labanhspo/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  }