.proto ファイルをインポートする (import)
Protocol Buffers の .proto 内で import ステートメントを使用すると、他の .proto ファイルの内容を取り込むことができます。
次の例では、main.proto から other.proto の内容をインポートして、OtherMessage というメッセージ型を参照しています。
syntax = "proto3";
option go_package = "github.com/maku77/myapp/message";
import "message/other.proto";
message MainMessage {
OtherMessage other = 1;
}syntax = "proto3";
option go_package = "github.com/maku77/myapp/message";
message OtherMessage {
string content = 1;
}インポートのパスは、デフォルトでは protoc コマンドを実行したディレクトリからの相対パスで指定します。
起点となるディレクトリを変更したい場合は、protoc コマンドの --proto_path オプションで、.proto ファイルを配置したルートディレクトリを指定します。
$ protoc --go_out=. --go_opt=paths=source_relative --proto_path=proto message/main.proto
上記のように実行すると、proto/message/main.proto ファイル(およびそこからインポートされているファイル)を入力情報として、message/main.pb.go が生成されます。
- 参考: protoc コマンドで .proto ファイルをコンパイルする (Protocol Buffers Compiler)
- 参考: Go 言語で gRPC 通信してみる(Echo サーバー&クライアント)
インポートした内容を再公開する (import public)
別の .proto ファイルをインポートするときに、import public を使用すると、インポートした内容(メッセージ型の定義など)を自分自身が定義しているかのように公開することができます。
以下の例では、main.proto は other1.proto しかインポートしていませんが、間接的に other2.proto で定義している Other2Message メッセージ型を参照しています。
syntax = "proto3";
import "other1.proto";
message MainMessage {
Other2Message other2 = 1;
}syntax = "proto3";
import public "other2.proto";syntax = "proto3";
message Other2Message {
string content = 1;
}