protocol buffer中的一些點(pacakge、go_package、proto依賴等)


  1. protoc --proto_path=$GOPATH/src --proto_path=. --go_out=. ./*.proto
    a. 上面的句編譯語句中,--proto_path用於表示要編譯的proto文件所依賴的其他proto文件的查找位置,可以使用-I來替代。如果沒有指定則從當前目錄中查找。
    b. --go_out有兩層含義,一層是輸出的是go語言對應的文件;一層是指定生成的go文件的存放位置。
    c. --go_out=plugins=grpc:helloworld,這里使用了grpc插件。如果proto文件想在rpc中使用,可以在proto中定義接口如下:
    service SearchService {
      rpc Search(SearchRequest) returns (SearchResponse);
    }
    helloworld表示生成的文件存放地址。
  2. protoc --go_out=plugins=grpc:. --go_opt=paths=source_relative ./update.proto
    a. --go_opt表示生成go文件時候的目錄選項,如上面寫時表示生成的文件與proto在同一目錄。
  3. import、go_package、package
    a. package主要是用於避免命名沖突的,不同的項目(project)需要指定不同的package。
    b. import,如果proto文件需要使用在其他proto文件中已經定義的結構,可以使用import引入。
    c. option go_package = "github.com/protocolbuffers/protobuf/examples/go/tutorialpb"; go_packge有兩層意思,一層是表明如果要引用這個proto生成的文件的時候import后面的路徑;一層是如果不指定--go_opt(默認值),生成的go文件存放的路徑。
    d. 需要注意的是package和go_package的含義。在官方給的文檔中,package和go_package的最后一個單詞不一樣:

    他們的含義分別是:package用於防止不同project之間定義了同名message結構的沖突,因為package名的一個作用是用於init方法中的注冊:

    而當go_package存在時,其最后一個單詞是生成的go文件的package名字:

    而當go_package不存在時,go文件件的package名字就變成了proto中package指定的名字了。


免責聲明!

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



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