什麼是protobuf
Google Protocol Buffer( 簡稱 Protobuf) 是 Google 公司內部的混合語言資料標準。
Protocol Buffers 是一種輕便高效的結構化資料存放區格式,可以用於結構化資料序列化,或者說序列化。它很適合做資料存放區或 RPC 資料交換格式。可用於通訊協議、資料存放區等領域的語言無關、平台無關、可擴充的序列化結構資料格式。
如何安裝protobuf
# 擷取源碼包wget https://github.com/google/protobuf/archive/v3.5.0.tar.gz# 解壓縮並進入源碼目錄tar -zxvf v3.5.0.tar.gzcd protobuf-3.5.0# 產生configure檔案./autogen.sh# 編譯安裝./configuremakemake checkmake install
在執行./autogen.sh
過程中可能會因缺乏automake依賴庫而報錯:autoreconf: failed to run aclocal: No such file or directory,要解決此錯誤,在linux系統可以通過sudo yum install automake
或者sudo apt-get install automake
安裝automake,在macos系統可以通過brew install automake
安裝automake。
- 檢測protobuf是否已成功安裝
命令列執行protoc --version
。windows系統需要將protoc.exe檔案所在的目錄添加到環境變數。
如何使用protobuf
protobuf支援跨語言使用,很多主流的開發語言都有protobuf支援庫,我們用golang來示範如何使用protobuf進行資料序列化。
go get -u github.com/golang/protobuf/{protoc-gen-go,proto}
- 編寫.proto檔案
$GOPATH/src/test/protobuf/pb/user.proto
package pb; message user { int32 id = 1; string name = 2; } message multi_user { repeated user users = 1; }
package main import ( "log" "test/protobuf/pb" "github.com/golang/protobuf/proto" ) func main() { user1 := pb.User{ Id: *proto.Int32(1), Name: *proto.String("Mike"), } user2 := pb.User{ Id: 2, Name: "John", } users := pb.MultiUser{ Users: []*pb.User{&user1, &user2}, } // 序列化資料 data, err := proto.Marshal(&users) if err != nil { log.Fatalln("Marshal data error: ", err) } println(users.Users[0].GetName()) // output: Mike // 對已序列化的資料進行還原序列化 var target pb.MultiUser err = proto.Unmarshal(data, &target) if err != nil { log.Fatalln("Unmarshal data error: ", err) } println(target.GetUsers()[1].Name) // output: John }
相關擴充
sublime外掛程式:Protobuf Syntax Hightlighting
參考資料
- Protocol Buffers簡明教程
- linux下安裝google protobuf(詳細)
- Golang 序列化之 ProtoBuf