web-dev-qa-db-ja.com

protoc go_packageの正しい形式?

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

では、プロジェクトのレイアウトを壊さずに正しい方法は何ですか?

2
Tim

プロトファイルに関連するファイルを追加するよう指示するGoオプションを追加するだけです。

protoc --go_out=. --go_opt=paths=source_relative your_file.proto 

これにより、your_file.pb.goがyour_file.protoと同じディレクトリに作成されます。

0
Vaibhav Grover