gRPC の勉強というか仕事というか。
適当に proto ファイルを作って、protoc-gen-go と protoc-gen-go-grpc をインストールした状態で protoc を実行する。
が、エラーになった。
protoc-gen-go-grpc: unable to determine Go import path for "rpc.proto"
Please specify either:
• a "go_package" option in the .proto source file, or
• a "M" argument on the command line.
See https://developers.google.com/protocol-buffers/docs/reference/go-generated#package for more information.
--go-grpc_out: protoc-gen-go-grpc: Plugin failed with status code 1.
今回は自作した proto ファイルなので好きに編集できるが、別のところが提供している proto ファイルを使う場合は加工したくない。
なので --go_opt=M を付けて protoc を実行すると成功した。
というところまではよかった。
https://grpc.io/docs/languages/go/quickstart/#regenerate-grpc-code
これを書いている時点では protoc-gen-go@v1.28 と protoc-gen-go-grpc@v1.2 になっている。
で、私の環境では前者がv1.27.1、後者がv1.1.0 だった。
まあせっかくなのでアップデートしておこうということでそれぞれ書いてあるバージョンにしたのだが、そうすると --go_opt=M を指定してもエラーが出るようになってしまった。
protoc-gen-go-grpc を v1.1.0 に戻すと成功したので挙動が変わったのか?
どうも --go-grpc_out を指定するとダメっぽい。
えー、ここにはそう書いてあるよね??
protoc \
--go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
--go_opt=Mrpc.proto=abc/rpc \
rpc.proto
これの --go-grpc_out の行を消して実行するとうまくいくのだよ。
そしてファイルも生成するのだ。
grpc っぽい引数もないのによいのだろうか?
あー、ダメだ。生成されたのは rpc.pb.go だけで rpc_grpc.pb.go が生成されていない。
んん、ということは grpc の方のオプションにも M を指定すればよいということか??
protoc \
--go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
--go_opt=Mrpc.proto=abc/rpc \
--go-grpc_opt=Mrpc.proto=abc/rpc \
rpc.proto
できた。そんだけのことかー。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。