本文主要给大家介绍了关于去语言安装使用protobuf的相关内容,分享出来供大家参考学习、下面话不多说了,来一起看看详细的介绍吧。
protobuf是谷歌开发出来的一个语言无关,平台无关的数据序列化工具,在rpc或tcp通信等很多场景都可以使用。通俗来讲,如果客户端和服务端使用的是不同的语言,那么在服务端定义一个数据结构,通过protobuf转化为字节流,再传送到客户端解码,就可以得到对应的数据结构。这就是protobuf神奇的地方,并且,它的通信效率极高,“一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一”。
编译安装protobuf的编译器protoc
wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz 焦油zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1./配置 使 使安装
,,,,,,,执行<代码> protoc - h> 代码查看安装是否成功
安装插件protoc-gen-go,它是一个去程序,编译它之后将可执行文件执行路径写入环境变量
去github.com/golang/protobuf/protoc-gen-go
获取样机包
去github.com/golang/protobuf/proto
protobuf的使用方法是将数据结构写入到.proto文件中,使用protoc编译器编译(间接使用了插件)得到一个新的包,里面包含去中可以使用的数据结构和一些辅助方法。
<强>编写测试。原型文件
强>
包的例子; enum FOO {X=17;}; {消息测试 需要字符串标签=1; 可选int32 type=2(默认=77); 重复int64代表=3; 可选组OptionalGroup=4 { 需要字符串RequiredField=5; } }
,,,编译:
,,,执行<代码> protoc——go_out=?。原型代码>生成test.pb。去文件
,,,将test.pb.go文件放入例子文件夹(对应上面包)中,作为示例包
<强>尝试强>
主要包 导入( “日志” "github.com/golang/protobuf/proto” “例子” ) 函数main () { 测试:=和例子。测试{ 标签:proto.String (“hello”), 类型:proto.Int32 (17), 代表:[]int64 {1,2,3}, Optionalgroup:和例子。Test_OptionalGroup { RequiredField:原型。字符串(“再见”), }, } 数据,犯错:=proto.Marshal(测试) 如果犯错!=nil { 日志。致命的(“封送处理错误:犯错) } 纽特:=,example.Test {} 呃=原型。Unmarshal(数据、纽特) 如果犯错!=nil { 日志。致命的(“解封错误:犯错) }//现在测试和纽特包含相同的数据。 如果test.GetLabel () !=newTest.GetLabel () { 日志。Fatalf(“数据不匹配% q !=% q ", test.GetLabel (), newTest.GetLabel ()) }//test.GetOptionalgroup () .GetRequiredField ()//等 }
-
<李>消息测试对为struct结构,其属性字段有了对应的得到方法,在去中可以使用<代码> test.GetLabel() 代码>,<代码> test.GetType() 代码>获取测试对象的属性李>
<李> OptionalGroup对应为结构体中的内嵌结构李>
<李>原型文件中重复属性对于切结构李>
<李> <代码> test.Reset() 代码>可以使其所有属性置为0值李>
<李>使用编组和数据编出可以轻松的编码和解码李>
这些只是一些特性,想要仔细研究可以查看github上的wiki: https://github.com/golang/protobuf
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。