最近在用 Go 重构一个项目,其中就用到了 Protobuf。

Protobuf 是 Google Protocol Buffer 的简称,是一种结构化数据存储格式,用于对数据进行序列化和反序列化。由于是二进制的数据格式,所以具有更高的打包、传输、解包效率。文件以.proto 为后缀,详细语法看文档

在 Go 中使用 Protobuf,需要安装编译工具,用于将 proto 文件编译为 go 包。

安装编译工具:

brew install grpc

grpc 中包含了编译工具protoc

这个protoc 工具其实支持的语言很多,Java、Python、C++等,所以为了支持 go,需要装一个 go 的插件:

go get -u github.com/golang/protobuf/protoc-gen-go

安装完之后,就会在 go 的工作目录下的 bin 中生成一个 protoc-gen-go 的可执行程序,只要PATH 中添加过$GOPATH/bin的话就能正常运行了。

使用也很简单,创建完相应的.proto 文件,运行:

protoc -I . --go_out=. example.proto

-I配置的是寻找 proto 文件的路径,–go_out 配置的是输出目录。需要注意的是,如果你的 proto 中用到了 import,那么 import 也是从-I 的目录中找的。

.proto 文件可以配置生成 go包的包名:

option go_package = "example";

编译完成就会在相应目录下生成一个.pb.go 的文件了,可以和一般的 go 包一样引用使用。