Golang 序列化之 ProtoBuf
阿新 • • 發佈:2022-05-04
安裝
1.安裝 protoc :Protoc下載地址(https://github.com/google/protobuf/releases
),可以根據自己的系統下載相應的 protoc,windows 使用者統一下載 win32 版本。
2.配置 protoc 到系統的環境變數中,執行如下命令檢視是否安裝成功:
$ protoc --version
# 如果正常列印 libprotoc 的版本資訊就表明 protoc 安裝成功
3.安裝 ProtoBuf 相關的 golang 依賴庫
$ go get -u github.com/golang/protobuf/{protoc-gen-go,proto}
使用
1.建立 Demo golang工程
2.在 example 包中編寫 person.proto
syntax = "proto3"; package example; message person { // aa 會生成 Aa 命名的結構體 int32 id = 1; string name = 2; } message all_person { // aa_bb 會生成 AaBb 的駝峰命名的結構體 repeated person Per = 1; }
3.進入 Demo 工程的 example 目錄,使用 protoc 編譯 person.proto
$ protoc --go_out=. person.proto
# 就會生成 person.pb.go 檔案
4.在 golang 工程中使用 protobuf 進行序列化與反序列化
# main.go package main import ( "github.com/golang/protobuf/proto" "Demo/example" "log" ) func main() { // 為 AllPerson 填充資料 p1 := example.Person{ Id:*proto.Int32(1), Name:*proto.String("xieyanke"), } p2 := example.Person{ Id:2, Name:"gopher", } all_p := example.AllPerson{ Per:[]*example.Person{&p1, &p2}, } // 對資料進行序列化 data, err := proto.Marshal(&all_p) if err != nil { log.Fatalln("Mashal data error:", err) } // 對已經序列化的資料進行反序列化 var target example.AllPerson err = proto.Unmarshal(data, &target) if err != nil{ log.Fatalln("UnMashal data error:", err) } println(target.Per[0].Name) // 列印第一個 person Name 的值進行反序列化驗證 }