解決protobuf import路徑的問題


網上關於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文件:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM