Go to listに方法がありますall標準/組み込みパッケージ(つまり、GoLangインストールでインストールされるパッケージ)
パッケージのリストがあり、どのパッケージが標準であるかを把握したいと思います。
これには、新しい _golang.org/x/tools/go/packages
_ を使用できます。これにより、ほとんどの_go list
_にプログラムインターフェイスが提供されます。
_package main
import (
"fmt"
"golang.org/x/tools/go/packages"
)
func main() {
pkgs, err := packages.Load(nil, "std")
if err != nil {
panic(err)
}
fmt.Println(pkgs)
// Output: [archive/tar archive/Zip bufio bytes compress/bzip2 ... ]
}
_
isStandardPackage()
を取得するには、次のようにマップに保存できます。
_package main
import (
"fmt"
"golang.org/x/tools/go/packages"
)
var standardPackages = make(map[string]struct{})
func init() {
pkgs, err := packages.Load(nil, "std")
if err != nil {
panic(err)
}
for _, p := range pkgs {
standardPackages[p.PkgPath] = struct{}{}
}
}
func isStandardPackage(pkg string) bool {
_, ok := standardPackages[pkg]
return ok
}
func main() {
fmt.Println(isStandardPackage("fmt")) // true
fmt.Println(isStandardPackage("nope")) // false
}
_
使用 go list std
コマンドで標準パッケージをリストします。特別なインポートパスstd
は、標準のGoライブラリのすべてのパッケージに展開されます( doc )。
Goプログラムでリストを取得するコマンドを実行します。
cmd := exec.Command("go", "list", "std")
p, err := cmd.Output()
if err != nil {
// handle error
}
stdPkgs = strings.Fields(string(p))
簡単なソリューションが必要な場合は、パッケージが$ GOROOT/pkgに存在するかどうかを確認できます。すべての標準パッケージがここにインストールされます。