2023/11/25

protoc-gen-go-grpcの-Mオプションがうまくいかない

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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。