2017-09-08 15 views
1

私は私のプロジェクトでdepを使用しようとしていると私は、依存関係を追加しようとすると:Goソースで相対インポートを見つけるにはどうすればよいですか?

dep ensure -add github.com/foo/bar 

私はのようなエラーの多くを得る:

ensure Solve(): No versions of github.com/foo/bar met constraints: 
v1.2.3: Could not introduce github.com/foo/[email protected], as its subpackage github.com/foo/bar 
does not contain usable Go code (*build.NoGoError).. (Package is required by (root).) 

Apparently、このような問題は、一般的です問題のプロジェクト内で相対的なインポートが原因で発生します。

大規模なプロジェクトで相対インポートをどのように見つけることができますか?既存のGoツールで私を助けてくれますか?

私の現在の解決策は、grep -rn '"\./' --include=\*.go .の出力をクロールすることですが、それは遅くなります。

答えて

1

go listコマンドを使用すると、インポートされたすべてのパッケージを見つけることができます。

go list -f '{{ join .Imports "\n" }}' 

は内部的には、相対的な輸入は絶対パスに変換され、_で始まるので、これはあなたのパッケージのいずれかの任意の相対的な輸入を表示する必要があります。

go list -f '{{ join .Imports "\n" }}' ./... | grep '^_' 

相対インポートは、名前で参照されるパッケージでは機能しません。なぜなら、それらはGOPATHに存在する必要があるからです。おそらく、あなたが使用していないパッケージ、または_test.goのファイルがパッケージディレクトリから暗黙的に実行されることを意図しています。テストインポートは個別にチェックできますが、展開されている間はクリーンアップされておらず、接頭辞は_です。

go list -f '{{ join .TestImports "\n" }}' ./... | grep '\./' 
関連する問題