web-dev-qa-db-ja.com

すべての標準Goパッケージをリストできますか?

Go to listに方法がありますall標準/組み込みパッケージ(つまり、GoLangインストールでインストールされるパッケージ)

パッケージのリストがあり、どのパッケージが標準であるかを把握したいと思います。

183

これには、新しい _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
}
_
48
Martin Tournoij

使用 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))
31
Cerise Limón

簡単なソリューションが必要な場合は、パッケージが$ GOROOT/pkgに存在するかどうかを確認できます。すべての標準パッケージがここにインストールされます。

3
svetha.cvl