Golang中使用ProtoBuf
protobuf類似json,它體積更小效率更高
Golang中使用ProtoBuf
protobuf類似json,它體積更小效率更高,規範統一(沒有大小寫等困擾)。
缺點是改動協議就要重新生成、數據本身是二進位沒有可讀性
-
下載,window系統選.exe,解壓縮放到$GOPATH/bin
https://github.com/protocolbuffers/protobuf/releases
-
安裝golang對應的庫跟插件
go get github.com/golang/protobuf/proto go get github.com/golang/protobuf/protoc-gen-go
-
測試
protoc -h 或 protoc --version
沒報錯就是成功
-
消息體舉例,xxx.proto
// 指定版本,不打3就會是2 syntax="proto3"; // 指定輸出位置&go包名,沒寫轉換不了 // option go_package ="path;name"; option go_package ="/."; // 放在同一目錄下包名為__(空) // 定義消息體,分配唯一編號 (不能用19000~19999) message Student{ int32 age = 1; // 可以不從1開始,但不可重複 string name = 2; People p=3; repeated int32 score=4; // 數組 Week w=5; // 聯合體 oneof data{ string teacher=6; string class=7; } } // 消息體可以嵌套 message People{ int32 weight=1; } // 定義枚舉類型 enum Week{ Monday=0; // 必須從0開始 Turesday=1; }
-
生成go文件
protoc --go_out=. *.proto
-
成功轉換出來的就會是一個xxx.pb.go的文件,可以點開看一下,它就是轉換成go語言的版本,記住不要修改這個檔案(他第一行就叫你不要修改)
添加rpc服務
-
語法:
service 服務名{ rpc 函數名(參數:消息體) returns (返回值:消息) } 舉例: service bj{ rpc Say(People) returns (Student); }
但是rpc用的很廣,他不知道你要轉成給誰用的,於是要調用另一個生成的指令
protoc --go_out=plugins=grpc:. *.proto
這就是grpc了,到下章繼續…
上次修改於 2021-09-26
此篇文章的評論功能已經停用。