2017-01-27 8 views
2

パッケージがインストールされているかどうかを確認する必要がありますが、コードを使用する必要があります。go listツールをシェルにインストールする必要はありません。私は解決策を見つけたが、それは非常に遅い(2〜3秒)。これは私の現在のコードです:Goにインストールされたパッケージを確認する

out, err := exec.Command("sh", "-c", "go list all").Output() 
if err != nil { 
    output := strings.Split(string(out), "\n") 
    for _, value := range output { 
     if value == "github.com/some/package" { 
      // package is installed 
     } 
    } 
} 

答えて

2

ですから、基本的にあなた自身の質問に答えました。あなたはより速い解決策が欲しいですか? go listコマンドを「チューニング」してみてください。

単一のパッケージの存在を確認するには、その単一のパッケージをgo listに渡します。存在する場合は出力します。そうでない場合、出力はエラーメッセージになります。 github.com/some/packageが存在する場合は

例えば、

go list github.com/some/package 

を実行すると、出力は次のようになります。

github.com/some/package 

あなたはまたgo listに複数のパッケージを渡すことができます。

go list github.com/some/package github.com/other/package 

、出力がされます:

github.com/some/package 
github.com/other/package 

渡されたパッケージが存在しない場合は、出力のようなものになります。

can't load package: package github.com/some/package: cannot find package "github.com/some/package" in any of: 
    /usr/local/go/src/github.com/some/package (from $GOROOT) 
    <GOPATH-here>/src/github.com/some/package (from $GOPATH) 

はまた、あなたが通過したパッケージは、*.goファイルが含まれていない場合、あなたは別のメッセージを得ることに注意してください

can't load package: package github.com/some/package: no buildable Go source files in <GOPATH-here>/src/github.com/some/package 

あなたはその中にいくつかのパッケージを期待していた場合は、追加...

go list github.com/some/package/... 

go help listを実行し、関連する質問をご覧ください。How to list installed go packages

+0

ありがとう、今は1000倍高速です – Alen

関連する問題