問題を送信する前に、これらの質問に答えてください。 ありがとう!
go version
)?goバージョンgo1.8.3linux / amd64
go env
)?Ubuntu Linux、amd64
ベンダーの依存関係をインポートするパッケージでgolang.org/x/tools/cmd/stringerを実行しようとしました
ツールは期待どおりに機能します
'go build'および他のすべてのツールは、$ GOPATH / src / vendorでベンダー化された依存関係では問題ないように見えますが、ストリンガーはインポートエラーで失敗します。
$ go build plinth/auth
$ go get golang.org/x/tools/cmd/stringer
$ go generate plinth/auth
stringer: checking package: auth.go:8:2: could not import golang.org/x/net/context (can't find import: vendor/golang.org/x/net/context)
src/plinth/auth/auth.go:37: running "stringer": exit status 1
$ stringer -type Role $GOPATH/src/plinth/auth
stringer: checking package: [...]/src/plinth/auth/auth.go:8:2: could not import golang.org/x/net/context (can't find import: vendor/golang.org/x/net/context)
$ ls $GOPATH/src/vendor/golang.org/x/net/context
context.go context_test.go ctxhttp go17.go go19.go pre_go17.go pre_go19.go withtimeout_test.go
この問題も発生しています。 https://travis-ci.org/stripe/veneur/builds/278659663で確認できるように、Go1.8でのみ表示されます。 対応するプルリクエストのDockerfileを、Go1.9ではなくGo1.8を使用するように変更することで、ローカルで再現できます。 見つからないパッケージ(この場合はgithub.com/gogo/protobuf/proto
)がgo install
でインストールされている場合でも発生します。
ストリンガーインポーターは、1.8ではデフォルトのGoインポーターを使用しますが、1.9では使用しません。
Stringerを実行する前に、現在のプロジェクト(インポートできないパッケージではなく、インポートがベンダー化されているパッケージ)でgo install
を実行すると、問題が修正されます。
stringer
でこれを修正しようとしましたが、 go/importer
自体の動作が1.8と1.9の間でこのように変化した理由はわかりません。 誰かが私をここで正しい方向に向けることができますか?
この問題はGo1.10で修正されましたが、最近再導入されました。 それを導入したコミットはhttps://github.com/golang/tools/commit/ffe88906718454e356e61776b54256e873fc133bであり、CL40403を元に戻していると確信しています。
https://github.com/golang/go/issues/25650を解決するためにコミットが元に戻されましたが、関連するhttps://github.com/golang/go/issues/10249が再導入されています。
元々は年齢のためにロックされていたため、この問題についてコメントすることはできません。2日前に再開されましたが、それでも共同編集者に限定されています。
@ ChimeraCoder #10249のロックを解除しました。
最も参考になるコメント
@ ChimeraCoder #10249のロックを解除しました。