Outdated この記事の内容は古いです。現在はドキュメントのとおりにやればOKです。
| |
Updated: Dec. 13, 2021
GoでgRPCのコードを書くとき、.protocにgo_packageを書いた場合、protocが"github.com/..."のようにフルパスでコードを出力します(たぶん意図した動作ではない)。これはprotocの--go_optオプションで回避できます。
protoc-gen-goでgo_packageに関するWARNINGが出る
gRPCのUnary RPCでHelloするプログラムがあるとします。
| |
Protobuf(greeter.proto)は次のように定義されています。
| |
これでGo向けのコードを生成すると、go_packageに関するWARNINGが出ます。
| |
| |
go_package オプションを付けろとのことです。付けなくても動きますが、つけておくべきでしょう。しかし、つけると出力のパスがおかしくなります…。
option go_packageをつけると出力先がおかしい
2行目のようにoption go_packageを付けて、もう一度Goのコードを生成します。
| |
protocを実行すると、Goのコードが次のディレクトリ構成で出力されます。
| |
違う、そうじゃない
これだとimport文がimport "github.com/ebiiim/greeter/grpc/github.com/ebiiim/greeter/grpc"になりますが、やりたいのはimport "github.com/ebiiim/greeter/grpc"です。
つまり、次のように出力してほしいのです。
| |
これにはprotocに--go_optオプションをつける必要があります。
Go Modulesが登場する前はGOPATH以下にソースコードを置いていたので、このようにprefix付きで出力するのが正しかったのですが…。
解決法: protocに–go_optオプションをつける
https://github.com/golang/protobuf/issues/748
詳しくは追いかけていませんが、2020年3月21日に変更が入ったようなので、最新のバージョンであれば使えるはずです。
詳しくは追いかけていませんが、2020年3月21日に変更が入ったようなので、最新のバージョンであれば使えるはずです。
次のように、protocに--go_optオプションをつければOKです。
| |
本記事のソースコード https://github.com/ebiiim/greeter