網上關於protobuf import的文章不太詳細,有些問題說的不全,比如import時的路徑是在哪個目錄中搜索的,比如:
我有一個這樣的目錄結構,我怎么在demo2/protoDemo2.proto文件中導入demo1/test.proto中的文件呢?
以下是protoDemo2.proto中的代碼:
1 syntax="proto3"; 2 import "test.proto"; 3 package protoDemo2; 4 5 enum Book { 6 UNKNOWN = 0; 7 STUDY = 1; 8 STORY = 2; 9 TECH = 3; 10 LAUGHT = 4; 11 } 12 13 enum Food { 14 COOKIE = 0; 15 HUMBURGER = 1; 16 RICE = 2; 17 BREAD = 3; 18 } 19 20 message Test2{ 21 test.ContactBook book = 1; 22 }
可以看到我import時沒用路徑,只使用了test.proto。
在protoc中輸入:
protoc --proto_path=./src/protobufDemo/demo1/ --proto_path=./src/protobufDemo/demo2 --go_out=./src/protobufDemo/demo2 protoDemo2.proto
執行protoc編譯器生成go文件:
--proto_path: 指定了要去哪個目錄中搜索import中導入的和要編譯為.go的proto文件,可以定義多個,我使用了兩個proto_path,第一個指定了import "test.proto"中test.proto文件的搜索目錄,第二個定義了要編譯的文件protoDemo2.proto文件的目錄。
--go_out: 指定了生成的go文件的目錄,我在這里把go文件放到了demo2這個目錄中。
最后的protoDemo2.proto, 定義了我要編譯的文件是哪個文件。
最后生成的go文件: