Protobuf生成Go代码插件
1. 安装protoc
- 首先protoc --version 查询本机版本。假设从protoc2更换到protoc3.
- 在官方Githubhttps://github.com/protocolbuffers/protobuf/下载地址找相应版本的源码。
发布版本见链接https://github.com/protocolbuffers/protobuf/releaseswget https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.7.1.zip unzip v3.7.1.zip -d ./
window下载地址示例: https://github.com/protocolbuffers/protobuf/releases/download/v25.4/protoc-25.4-win64.zip
- 删除本机的protoc,例如
sudo rm -rf /usr/local/include/google/protobuf
- 根据1步骤中下载源码的Readme进行安装。
cd ${your path} ./autogen.sh 生成configure文件 ./configure --prefix=/usr make # make check sudo make install sudo ldconfig # refresh shared library cache.
注意,其中第二行命令可以通过--prefix指定地址。但是我嫌麻烦就没弄 ↵
至此,protoc --version已经变成了3.7.1 - 假设需要从protoc3再变回protoc2,需要重复1,2,3步骤(别忘了下载需要的2.8.0版本)。
- 如果还要换回protoc3,注意,只需要完成第2步,和第3步中的最后两行命令即可。同样的,从protoc3换回protoc2也是一样的操作。
sudo make install sudo ldconfig # refresh shared library cache.
- 以上一系列操作,不要删除编译的源码,否则需要重复第3步全部代码,很费时间。
2. Protobuf生成Go代码插件
$ export GO111MODULE=on # Enable module mode
#这里需要确保${GOPATH}/bin位于环境变量path中
$ echo ${GOPATH}
$ export PATH=${PATH}:${GOPATH}/bin
# 可以指定版本下载二进制工具
#go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.27.1
#go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1.0
go install google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
#在所在项目中,执行以下命令可指定版本
protoc --go_out=. --go-grpc_out=. xxx.proto
3. 执行脚本
生成该目录下所有.proto文件为对应.go文件代码
#!/usr/bin/env bash
set -eo pipefail
PROTO_RELATIVE_PATH="."
protodirs=$(find "${PROTO_RELATIVE_PATH}" -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq)
for dir in ${protodirs}; do
#$(find "${dir}" -maxdepth 1 -name '*.proto')
protofiles="${dir}/*.proto"
echo "generating pb ${protofiles}"
protoc --go_out=../../../.. \
--go-grpc_out=../../../.. ${protofiles}
done