すべての標準のGoパッケージを一覧表示できますか?


186

Goにすべての標準/組み込みパッケージ(つまり、Goインストールでインストールされるパッケージ)を一覧表示する方法はありますか?

パッケージのリストがあり、どのパッケージが標準であるかを知りたいのですが。


7
デフォルトのGoパッケージgolang.org/pkg
Arslanbekov

isStandardPackage(importPath string) bool使える機能はありますか?
Alok Kumar Singh

1
これは使用できますか?golang.org/pkg/cmd/go/internal/list
Alok Kumar Singh

すべてのインストールパッケージを表示するリストだと思います。
アルスランベコフ

ここで何を達成しようとしていますか?のないインポート文.は、独自の内部パッケージまたは標準ライブラリの一部です。
ifnotak

回答:


49

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
}

すぐにokどこから来たのかを検索し、この素晴らしい記事を見つけました。reddit.com/r/golang/comments/35d0b2/about_the_comma_o​​k_idiom
インサイダー

2
packages.Load(nil, "std")呼び出しは、実行go listコマンドをし、出力を解析します。パッケージがコマンドの実装を提供しているという誤った仮定もしているかもしれない他の人のためにこれを書き留めます。
iLoveReflection

32

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))

3

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.