在go语言中安装与使用protobuf的方法详解
2017-08-15 11:28
1256 查看
简介
本文主要给大家介绍了关于go语言安装使用protobuf的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
protobuf是Google开发出来的一个语言无关、平台无关的数据序列化工具,在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 tar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1./configure make make install
执行
protoc -h查看安装是否成功
安装插件 protoc-gen-go,它是一个go程序,编译它之后将可执行文件执行路径写入环境变量
go get github.com/golang/protobuf/protoc-gen-go
获取proto包
go get github.com/golang/protobuf/proto
在go中使用
protobuf的使用方法是将数据结构写入到.proto文件中,使用protoc编译器编译(间接使用了插件)得到一个新的go包,里面包含go中可以使用的数据结构和一些辅助方法。
编写test.proto文件
package example; enum FOO { X = 17; }; message Test { required string label = 1; optional int32 type = 2 [default=77]; repeated int64 reps = 3; optional group OptionalGroup = 4 { required string RequiredField = 5; } }
编译:
执行
protoc --go_out=. *.proto生成 test.pb.go 文件
将test.pb.go文件放入example文件夹(对应上面package)中,作为example包
try
package main import ( "log" "github.com/golang/protobuf/proto" "example" ) func main() { test := &example.Test { Label: proto.String("hello"), Type: proto.Int32(17), Reps: []int64{1, 2, 3}, Optionalgroup: &example.Test_OptionalGroup { RequiredField: proto.String("good bye"), }, } data, err := proto.Marshal(test) if err != nil { log.Fatal("marshaling error: ", err) } newTest := &example.Test{} err = proto.Unmarshal(data, newTest) if err != nil { log.Fatal("unmarshaling error: ", err) } // Now test and newTest contain the same data. if test.GetLabel() != newTest.GetLabel() { log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) } //test.GetOptionalgroup().GetRequiredField() //etc }
一些对应关系
- message Test对为 struct 结构,其属性字段有了对应的get方法,在go中可以使用
test.GetLabel()
、test.GetType()
获取test对象的属性 - OptionalGroup对应为 struct中的内嵌struct
- proto文件中repeated属性对于slice结构
-
test.Reset()
可以使其所有属性置为0值 - 使用Marshal和Unmarshal可以轻松的编码和解码
这些只是一些特性,想要仔细研究可以查看github上的wiki:https://github.com/golang/protobuf
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
相关文章推荐
- go语言使用protobuf与c++做数据通信。
- Google protobuf的安装及使用和理解
- PB使用一:用protobuf-java-2.5.0.jar把 buffFight.proto 生成 buffFight.java 的方法
- Google的Protobuf安装及使用笔记一
- Google的Protobuf安装及使用笔记
- Unity中protobuf的使用方法
- c#序列化与反序列化通用方法, 使用protobuf-net实现
- Go语言的RPC介绍(含Protobuf-RPC)
- Win7下SQLite安装配置与使用方法详解
- postgresql(V-9.1) debian7.x(wheezy)安装过程+配置详解+数据库的基本使用方法
- Go语言中的Array、Slice、Map和Set使用详解
- 如何在Linux环境下在CodeBlock中安装使用Google Protobuf
- (转)Unity中protobuf的使用方法
- 【Go语言】LiteIDE使用的个人使用方法
- protobuf安装与使用
- Centos6.4下安装protobuf及简单使用
- Go语言开发-关于LiteIDE使用第三库时没有自动提示的解决方法
- linux下Google的Protobuf安装及使用笔记
- mac os安装protobuf 2.4错误解决方法
- Google protobuf的安装及使用