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