Catalog
- protobuf定義
- 優勢
- 應用場景
- 文法規則
-
- 定義消息類型
- option
-
- 可選的值
- field number
- protoc
-
- 定義
- protoc 、工具與插件
- 定制代碼生成插件
- 使用
-
- 例子
- 參考
protobuf定義
protocol buffer 是谷歌出品的語言獨立,平台獨立,可擴充的結構化資料序列化的元件就像XML一樣,但是protocol buffer編碼後更小、速度更快、使用更簡單。定義完你的結構化資料後,就可以使用配套工具生成的代碼,使用不同的語言對結構化資料流進行讀取和操作
,
優勢
- 簡單
- 速度更快(相對于JSON、XML)
- 體積更小(相對于JSON、XML)
- 語言獨立、平台獨立(amazing)
應用場景
文法規則
定義消息類型
文法
message <messageName>{
[field rules] <field type> <field name> =<field number>;
}
message SearchRequest {
required string query = 1;
optional int32 page_number = 2;
optional int32 result_per_page = 3;
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
optional Corpus corpus = 4 [default = UNIVERSAL];
}
option
可選的值
- optional 字段可選
- required 字段必須存在
- repeated 此字段可以被重複任何次數(包含0),相當于數組
field number
- field number:用來在消息二進制編碼中辨別字段
- 範圍: 0<n<2^30
- tips:對于1-15編碼後字段為1個位元組,對于>=16的field number 編碼後為兩個位元組
protoc
定義
- protoc 是protobuf的編譯器,用于将.proto檔案生成目智語言的代碼。
- protoc
protoc 、工具與插件
對于--xx_out參數,protoc在運作時會先去找xx工具,如果沒找到會再去找protoc-gen-xx,然後使用對應的工具來生成代碼,這裡生成的代碼不包含service,如何去生成service對應的代碼呢,這裡就需要指定對應語言工具所帶的插件,為什麼要指定插件呢,因為RPC有很多種時間方式,通過指定不同的插件來生成不同RPC實作方式的對應代碼,good
定制代碼生成插件
待填坑
使用
- terminal on *nix| cmd on windows,直接輸入protoc 即可檢視幫助資訊
protoc
例子
# 使用protoc-gen-go工具與它攜帶的grpc插件來生成rpc代碼,輸入檔案為 hello.proto ,輸出的目錄為 .(目前目錄)
protoc --go_out=plugins=grpc: . hello.proto
參考
- DOC protobuffers google官方文檔
- BOOK go語言進階程式設計