json与protobuf做数据传输对比:
json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用
0、跟Json相比,protobuf 的优缺点:
优点:
- 性能更高,更加规范;
- 编解码速度快,数据体积小;
- 使用统一的规范,不用再担心大小写不同导致解析失败等问题。
缺点:
- 失去了一些便利性;
- 改动协议字段,需要重新生成文件;
- 数据没有可读性;
1、安装protobuf库文件
方法(1)使用go get
go get github.com/golang/protobuf/proto(待验证)
方法(2)下载文件
或者直接通过protobuf下载链接,戳这里上下载或git clone下来对应放到到 $GOPATH\src\golang.org\x\protobuf 中(可用)
2、protobuf的编译器protoc
在protoc下载链接,戳这里上找到protoc的压缩包下载。并放到$GOROOT的bin目录下。
3、protobuf的编译器protoc
在go中使用protobuf,有两个可选用的包goprotobuf(go官方出品)和gogoprotobuf(二选一即可)。
gogoprotobuf完全兼容google protobuf,它生成的代码质量和编解码性能均比goprotobuf高一些。
使用protobuf:
go get github.com/golang/protobuf/protoc-gen-go
使用gogoprotobuf:(待验证)
gogoprotobuf有两个插件可以使用(二选一即可):
- protoc-gen-gogo:和protoc-gen-go生成的文件差不多,性能也几乎一样(稍微快一点点)
- protoc-gen-gofast:生成的文件更复杂,性能也更高(快5-7倍)
//gogo
go get github.com/gogo/protobuf/protoc-gen-gogo
//gofast
go get github.com/gogo/protobuf/protoc-gen-gofast
//安装gogoprotobuf库文件
go get github.com/gogo/protobuf/proto
go get github.com/gogo/protobuf/gogoproto //这个不装也没关系
//生成编译文件
//gogo
protoc --gogo_out=. *.proto
//gofast
protoc --gofast_out=. *.proto
成功后会在GOPATH的第一个目录的bin文件夹下生成protoc-gen-go可执行文件(如果该路径没在系统的环境变量中,则需要将改路径也加入到环境变量的path中去)。
4、使用protoc编译.proto文件成.pd.go文件
命令行进入.proto文件所在路径,使用 命令:
protoc --go_out=. *.proto
会把.pd.go文件生成到当前目录下,即完成编译过程。