protobuf(-)安装使用

protobuf 是一个二进制的接口数据结构,或者称为序列化格式 or接口描述语言。类比于json这种文本型的接口序列化格式,跨语言平台。优点是小巧,结构统一,缺点是通讯中的可读性稍差。

原理

跨平台,protobuf的接口写一处,可以到处执行。作为一个接口描述性语言,将接口定义在.proto后缀的文件里,然后通过编译器protoc 将该文件翻译成各种语言版本的接口。具体.proto 编写规范见后续文件。支持java,c++等几乎全部语言,go语言稍微特殊,除需要protoc 编译器外,还需要专门的一个go插件,protoc-go-gen.

安装protoc

下载protoc,地址https://github.com/google/protobuf/releases,里面可以找到win/linux/mac的二进制文件, 我们需要protoc-3.0.0-win32.zip或者protoc-3.0.0-linux-x86_64.zip,把里面的protoc.exe(其它文件不需要)拷贝到可行路径PATH下面OR把protoc.exe所在路径加入到PATH中。

protoc-go-gen

安装好go运行环境后,git环境,直接编译protoc-gen-go,会在GOPATH/BIN目录下,将其也拷贝到protoc.exe所在目录OR PATH目录。

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

编译

对于已经写好的.proto接口文件,需要用protoc 编译成相应语言才能使用。编译命令说明如下:

Usage: protoc [OPTION] PROTO_FILES
protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR --ruby_out=DST_DIR --javanano_out=DST_DIR --objc_out=DST_DIR --csharp_out=DST_DIR path/to/file.proto

可选内容详见—help。

示例:

protoc --go_out=./go/ ./proto/helloworld.proto

grpc与protobuf

grpc与protobuf同出一门,google,两者结合可认为是当前最佳实践。那么要应用grpc于protobuf编译,需要增加proto工具,

go get -u github.com/golang/protobuf/proto

同时使用protoc 编译的时候需要增加如下显示参数来生成grpc的接口客户端与服务端文件。

protoc --go_out=plugins=grpc:. *.proto