为什么要使用protobuf
最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用
跟Json相比protobuf性能更高,更加规范
编解码速度快,数据体积小
使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了
但也失去了一些便利性
改动协议字段,需要重新生成文件。
数据没有可读性
安装
在go中使用protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf。
gogoprotobuf完全兼容google protobuf,它生成的代码质量和编解码性能均比goprotobuf高一些
安装protoc
首先去https://github.com/google/pro… 上下载protobuf的编译器protoc,windows上可以直接下到exe文件(linux则需要编译),最后将下载好的可执行文件拷贝到$GOPATH的bin目录下($GOPATH/bin目录最好添加到系统环境变量里)
安装protobuf库文件
|
|
goprotobuf
安装插件
|
|
生成go文件
|
|
gogoprotobuf
安装插件
gogoprotobuf有两个插件可以使用
protoc-gen-gogo:和protoc-gen-go生成的文件差不多,性能也几乎一样(稍微快一点点)
protoc-gen-gofast:生成的文件更复杂,性能也更高(快5-7倍)
|
|
安装gogoprotobuf库文件
|
|
生成go文件
|
|
性能测试
这里只是简单的用go test测试了一下
|
|
go_protobuf的简单使用
test.proto
|
|
client_protobuf.go
|
|
server_protobuf.go
|
|