为什么要使用 protobuf
跟 JSON 相比 protobuf
优点
- 性能更高,更加规范
- 编解码速度快,数据体积小
- 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了
缺点
- 改动协议字段,需要重新生成文件。
- 数据没有可读性
安装
在 go 中使用 protobuf,有两个可选用的包 goprotobuf(go 官方出品)和 gogoprotobuf。
gogoprotobuf 完全兼容 google protobuf,它生成的代码质量和编解码性能均比 goprotobuf 高一些
安装 protoc
首先去https://github.com/google/pro… 上下载 protobuf 的编译器 protoc,同时设置环境变量
安装 protobuf 库文件
goprotobuf
安装插件和依赖库
1 | go get github.com/golang/protobuf/proto |
生成 go 文件
1 | protoc --go_out=. *.proto |
gogoprotobuf
安装插件和依赖库
gogoprotobuf 有两个插件可以使用
- protoc-gen-gogo:和 protoc-gen-go 生成的文件差不多,性能稍微快一点点
- protoc-gen-gofast:生成的文件更复杂,性能也更高(快 5-7 倍)
1 | // 依赖库 |
生成 go 文件
1 | //gogo |
简单使用
test.proto
1 | //指定版本,必须要写(proto3、proto2) |
client_protobuf.go
1 | package main |
server_protobuf.go
1 | package main |
性能测试
这里只是简单的用 go test 测试了一下
1 | //goprotobuf |
gRPC-go
安装
1 | go get -u github.com/golang/protobuf/{proto,protoc-gen-go} |
gRPC 仓库
1 | // 引入包 |
gRPC 文档
gRPC 需要使用插件:plugins=grpc
,冒号:
表示分割,点.
表示当前目录
1 | protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis --go_out=plugins=grpc:. *.proto |
protoc 工作原理
protoc 原理.html>)
gRPC gateway
gRPC 仓库
优点
- http rest 调用方式
- swagger 文档生成