内容简介:Protobuf是Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以注:本文主要注重protobuf的使用,所以省去了下载、安装的操作步骤。
Protobuf是Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以 很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式, 只要实现相同的协议格式即同一proto文件被编译成不同的语言版本,加入到各自的工程中去,这样不同语言就可以解析其他语言通过Protobuf序列化的数据。目前官网提供了C++,Python,JAVA,GO等语言的支持。
相对于JSON和XML具有以下优点:
-
简洁
-
体积小:消息大小只需要XML的1/10 ~ 1⁄3
-
速度快:解析速度比XML快20 ~ 100倍
-
使用Protobuf的编译器,可以生成更容易在编程中使用的数据访问代码
-
更好的兼容性,Protobuf设计的一个原则就是要能够很好的支持向下或向上兼容
注:本文主要注重protobuf的使用,所以省去了下载、安装的操作步骤。
二、创建一个test.proto文件并生成test.pb.go文件
syntax = "proto3"; //声明使用proto3协议 package test; //包名,通过protoc生成 go 文件 enum PhoneType{ HOME = 0; WORK = 1; } message Phone{ //消息定义的关键字 PhoneType type = 1; string number = 2; } message Person{ int32 id = 1; string name = 2; repeated Phone phones = 3; //字段可以被重复任意多次(包括0次) } message ContactBook{ repeated Person persons = 1; }
运行如下命令生成test.pb.go文件
> protoc --go_out=. *.proto
注意 包名要和文件夹名一致。
三、在Go语言中使用Protobuf
package main
import (
"fmt"
"io/ioutil"
"os"
"pftest/pf"
"pftest/github.com/golang/protobuf/proto"
)
func write() {
p1 := &pf.Person{
Id: 1,
Name: "小张",
Phones: []*pf.Phone{
{pf.PhoneType_HOME, "11111111"},
{pf.PhoneType_WORK, "22222222"},
},
}
p2 := &pf.Person{
Id: 2,
Name: "小王",
Phones: []*pf.Phone{
{pf.PhoneType_HOME, "33333333"},
{pf.PhoneType_WORK, "44444444"},
},
}
p3 := &pf.Person{
Id: 3,
Name: "小李",
Phones: []*pf.Phone{
{pf.PhoneType_HOME,"55555555"},
{pf.PhoneType_WORK,"66666666"},
},
}
book := &pf.ContactBook{}
book.Persons = append(book.Persons, p1)
book.Persons = append(book.Persons, p2)
book.Persons = append(book.Persons, p3)
data, _ := proto.Marshal(book)
ioutil.WriteFile("./test.txt", data, os.ModePerm)
}
func read() {
date, _ := ioutil.ReadFile("./test.txt")
book := &pf.ContactBook{}
proto.Unmarshal(date, book)
for _, v := range book.Persons {
fmt.Println(v.Id, v.Name)
for _, vv := range v.Phones {
fmt.Println(vv.Type, vv.Number)
}
}
}
func main() {
write()
read()
}
运行结果如下:
以上所述就是小编给大家介绍的《Golang语言下使用Protocol Buffer教程》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通Windows应用开发
[美] Jesse Liberty Philip Japikse Jon Galloway / 苏宝龙 / 人民邮电出版社 / 59.00元
Windows 8.1的出现不仅提供了跨设备的用户体验,也提供了跨设备的开发体验。本书着眼于实际项目中所需要的特性,以及现有C#编程知识的运用,对如何最大限度地利用Metro、WinRT和Windows 8进行了讲解,内容详尽,注重理论学习与实践开发的配合。 Windows 8.1和WinRT的作用及其特殊性 如何使用先进特性创建具有沉浸感和吸引力的Windows 8.1应用 如......一起来看看 《精通Windows应用开发》 这本书的介绍吧!