1package name 2 3import ( 4 "go/build" 5 "path/filepath" 6 "strings" 7) 8 9// Package will attempt to return a package version of the name 10// $GOPATH/src/foo/bar = foo/bar 11// $GOPATH\src\foo\bar = foo/bar 12// foo/bar = foo/bar 13func Package(s string) string { 14 return New(s).Package().String() 15} 16 17// Package will attempt to return a package version of the name 18// $GOPATH/src/foo/bar = foo/bar 19// $GOPATH\src\foo\bar = foo/bar 20// foo/bar = foo/bar 21func (i Ident) Package() Ident { 22 c := build.Default 23 24 s := i.Original 25 26 for _, src := range c.SrcDirs() { 27 s = strings.TrimPrefix(s, src) 28 s = strings.TrimPrefix(s, filepath.Dir(src)) // encase there's no /src prefix 29 } 30 31 s = strings.TrimPrefix(s, string(filepath.Separator)) 32 s = strings.Replace(s, "\\", "/", -1) 33 s = strings.Replace(s, "_", "", -1) 34 return Ident{New(s).ToLower()} 35} 36