golang使用proto3

使用protobuf

protoc

  • 下載protobuf的編譯器protoc
  • 地址:https://github.com/google/protobuf/releases
  • protoc.exe複製到GOPATH/bin下,GOPATH/bin加入環境變量

protoc-gen-go

  • go get github.com/golang/protobuf/protoc-gen-go

protoc-gen-gogo

  • 和protoc-gen-go生成的文件差不多,性能也幾乎一樣(稍微快一點點)
  • go get -u github.com/golang/protobuf/protoc-gen-gogo

protoc-gen-gofast

  • 生成的文件更復雜,性能也更高(快5-7倍)
  • go get -u github.com/golang/protobuf/protoc-gen-gofast
  • 注:這裏我選用gofast

安裝gogoprotobuf庫文件

  • go get github.com/gogo/protobuf/proto

生成go文件

  • 命令 protoc -I=path1 --gofast_out=path2 *.proto
  • -I:由於proto中可能是多協議間互相引用的關係,所以要加上-I,這樣生成時會引用其它協議
  • path1:爲生成時,需要引用的文件的路徑
  • --gofast_out:指定生成go文件的存放路徑
  • path2:生成go文件的存放路徑
  • *.proto:當前文件夾下所有的.proto全都生成
  • 示例bat:
    protoc -I=./  --gofast_out=./pb_go *.proto
    pause
    
  • 示例結構
    在這裏插入圖片描述
  • 示例說明:結構下有5個協議,其中http.proto和websocket.proto中都引用了enum.proto、errorCode.proto、及messageCommand.proto這三個協議。上述bat文件會將這些協議全都生成到pb_go文件當中。

Proto3中引用

  • 引用其它協議,要在將協議import
  • 示例在這裏插入圖片描述
  • 圖中引用的MessageCommandErrorCode在別的文件中,使用前如圖示引用

Proto3中的enum

  • enum必需要以0開始;
  • 當有意義的值爲0開始時,其中傳輸過程中會被省略。比如ErrorCode=0如果表示成功,那在傳輸過程中,接收方可能收不到這個0值。所以建議enum值中的0值留空,有意義的值從1開始;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章