protobuf3使用,golang语言实现
生活随笔
收集整理的這篇文章主要介紹了
protobuf3使用,golang语言实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.安裝protobuf3版本
下載安裝protobuf-3.1.0版本,?把 F:\Program Files\protoc-3.3.0-win32\bin\protoc.exe 文件路徑添加到環境變量中。
查看是否安裝成功,在命令行輸入:?proto --version
安裝成功之后,就可以按照protobuf的規則編碼和解碼任何我們想要傳輸的數據了。
比起xml和json形式的數據傳輸,protobuf擁有更高的數據壓縮比和壓縮效率。
2.寫test.proto文件
? 相當于給一個對象添加相應的屬性。
//指定版本 //注意proto3與proto2的寫法有些不同 syntax = "proto3";//包名,通過protoc生成時go文件時 package test;// 班級 message Class {int32 num = 1;repeated Student students = 2; }// 學生 message Student {string name = 1;int32 age = 2;Sex sex = 3; }//性別 enum Sex {MAN = 0;WOMAN = 1; }3.生成文件test.pb.go文件
.proto文件寫好之后,不方便我們在代碼中使用,需要利用剛才安裝的proto工具生成一個我們可以在代碼中方便實際調用的類。?
這個類生成之后就變成我們和protobuf交換數據的橋梁,我們可以看懂和使用,protobuf也可以識別和解析。
生成test.pb.go文件之后.proto就不需要了,但是為了后期更改和代碼可讀性繼續保留該文件。
test.pb.go具體代碼我就不貼出來了,命令如下:? protoc --go_out=. ?*.proto
?
4.測試和驗證
package mainimport ("github.com/goinaction/learning/proto3-my/test""github.com/gogo/protobuf/proto""io/ioutil""os""log" )func write() {c1 := &test.Class{Num: 1,Students: []*test.Student{{Name: "xiaoming", Age: 21, Sex: test.Sex_MAN},{Name: "xiaohua", Age: 21, Sex: test.Sex_WOMAN},{Name: "xiaojin", Age: 21, Sex: test.Sex_MAN},},}// 使用protobuf工具把struct數據類型格式化成字節數組(壓縮和編碼)data, _ := proto.Marshal(c1)// 把字節數組寫入到文件中ioutil.WriteFile("test.txt", data, os.ModePerm) }func read() {// 以字節數組的形式讀取文件內容data, _ := ioutil.ReadFile("test.txt")class := new(test.Class)// 使用protobuf工具把字節數組解碼成struct(解碼)proto.Unmarshal(data, class)log.Println(class.Num)for _, v := range class.Students {log.Println(v.Name, v.Age, v.Sex)} }func main() {write()read() }代碼輸出結果:
2018/11/02 16:18:52 1 2018/11/02 16:18:52 xiaoming 21 MAN 2018/11/02 16:18:52 xiaohua 21 WOMAN 2018/11/02 16:18:52 xiaojin 21 MAN?
總結
以上是生活随笔為你收集整理的protobuf3使用,golang语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 100人PJ?へへ。バージョン1.0の反
- 下一篇: 火星探险