定义
Protocol buffers是一个灵活、高效、自动化地序列化结构化数据的方案。类似于XML,但是更快、更小和更灵活。你只需要定义一次数据的结构,就可以使用多种语言从多种数据流中读取结构化数据,并进行操作。而且可以很方便的变更数据的结构,而且不影响基于变更前的数据结构的程序。
在golang中,protocol buffers可以基于不同的传输协议进行传输,如HTTP/2和AMQP(Advanced Message Queuing Protocol)。
Protocol buffers是一个类似JSON的传输格式,但是是强类型的、只能被服务器端和客户端理解,人是无法阅读的。即以二进制的方式进行传输,
优势
Protocal buffers和JSON或XML在序列化结构化数据方面进行对比,具有如下的优势:
- 它是强类型的;
- 它的体积更小;
- 在序列化和反序列化时,速度更快;
- 由于具有类型和序号,它更加清晰,不容易混淆;
- 它会产生数据访问的类,对编程更加友好;
使用
编译
protoc编译器会自动的基于.proto文件生成Go的结构体。这些结构体后期就会被导入到项目中进行业务处理,参与到序列化、反序列化的过程中。
安装编译器
安装编译器的方式根据操作系统的不同而不同,具体可参考:
github网址
具体到mac上,只要使用如下命令即可:
brew install protobuf
注意
在我们安装完成后,实际上是无法从.proto文件生成golang文件的,它会显示如下错误信息:
这个错误实际上是在提示我们我们还没有安装能产生golang文件文件的插件,因为在安装protobuf,它只是安装如下的语言插件:
下面我们就来解决这个问题,即安装golang的插件:
go get -u github.com/golang/protobuf/protoc-gen-go
编译器的插件protoc-gen-go会安装到 G O P A T H / b i n 目 录 下 , 除 非 我 们 设 置 了 GOPATH/bin目录下,除非我们设置了 GOPATH/bin目录下,除非我们设置了GOBI