安装
环境:
- 操作系统:macOS 10.12.5 / Ubuntu 16.04
- golang 版本:1.8.3
- protobuf 版本:3.3.2
- grpc-go 版本:1.4.2
准备工作
protobuf
项目地址:google/protobuf
这里直接使用brew
工具安装
$ brew install protobuf
brew
默认会安装最新版本,执行protoc
命令查看当前版本:
$ protoc --version
libprotoc 3.3.2
grpc-go
项目地址:grpc-go
- 要求golang版本 >= 1.6
$ go get -u google.golang.org/grpc
golang protobuf
项目地址:golang/protobuf
- 要求golang版本 > 1.4
- 使用前要求安装protobuf编译器
$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
安装protoc-gen-go
到 $GOPATH/bin
。 注意:该目录必须在系统的环境变量$PATH
中。
如果一路没有问题的话,到此为止,需要的环境都安装好了😀。
编译器使用
使用protoc
命令编译.proto
文件,不同语言支持需要指定输出参数,如:
$ 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
这里详细介绍golang的编译姿势:
-I
参数:指定import路径,可以指定多个-I
参数,编译时按顺序查找,不指定时默认查找当前目录--go_out
:golang编译支持,支持以下参数plugins=plugin1+plugin2
- 指定插件,目前只支持grpc,即:plugins=grpc
M
参数 - 指定导入的.proto文件路径编译后对应的golang包名(不指定本参数默认就是.proto
文件中import
语句的路径)import_prefix=xxx
- 为所有import
路径添加前缀,主要用于编译子目录内的多个proto文件,这个参数按理说很有用,尤其适用替代一些情况时的M
参数,但是实际使用时有个蛋疼的问题导致并不能达到我们预想的效果,自己尝试看看吧import_path=foo/bar
- 用于指定未声明package
或go_package
的文件的包名,最右面的斜线前的字符会被忽略- 末尾
:编译文件路径 .proto文件路径(支持通配符)
完整示例:
$ protoc -I . --go_out=plugins=grpc,Mfoo/bar.proto=bar,import_prefix=foo/,import_path=foo/bar:. ./*.proto