Goに既存のプロジェクトがあり、プロトコルバッファー/ gRPCを使用しています。最近まで、go_package
オプションはオプションで、結果のGoパッケージ名はプロトパッケージ名と同じでした。
このファイルはプロジェクトのルートにあります。生成されたコードファイル(authenticator.pb.go
)は同じ場所にあります。プロトファイル:
syntax = "proto3";
package authenticator;
service Authenticator {...}
生成コマンドは、同じディレクトリに出力することを指定します。
protoc --go_out=plugins=grpc:. authenticator.proto
今日、私は新しいバージョンのプロトコルバッファコンパイラとgithub.com/golang/protobuf/protoc-gen-go
をプルしました。最初の実行時に警告が表示されました:
WARNING: Missing 'go_package' option in "authenticator.proto",
please specify it with the full Go package path as
a future release of protoc-gen-go will require this be specified.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
提案されたリンクは多かれ少なかれ役に立たない。ただし、チュートリアルはもう少し明確です。
Go_packageオプションは、このファイルに対して生成されたすべてのコードを含むパッケージのインポートパスを定義します。 Goパッケージ名は、インポートパスの最後のパスコンポーネントになります。たとえば、この例では「tutorialpb」というパッケージ名を使用します。
option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb";
このオプションをprotoファイルに追加してコマンドを再実行すると、出力はプロジェクトのルートからの相対パスで終了します。何かのようなもの:
$GOPATH/src/github.com/<org>/authenticator/github.com/<org>/authenticator/authenticator.pb.go
私はgo_package
の名前として次の選択肢を試しました:
.
authenticator
生成は正しい場所で行われましたが、警告が返されました。
WARNING: Deprecated use of 'go_package' option without a full import path...
では、プロジェクトのレイアウトを壊さずに正しい方法は何ですか?
プロトファイルに関連するファイルを追加するよう指示するGoオプションを追加するだけです。
protoc --go_out=. --go_opt=paths=source_relative your_file.proto
これにより、your_file.pb.goがyour_file.protoと同じディレクトリに作成されます。