Protobuf生成Go代码插件
1. 安装protoc
- 首先protoc --version 查询本机版本。假设从protoc2更换到protoc3.
- 在官方Githubhttps://github.com/protocolbuffers/protobuf/下载地址找相应版本的源码。
12wget https://github.com/protocolbuffers/protobuf/archive/refs/tags/v3.7.1.zipunzip v3.7.1.zip -d ./ - 删除本机的protoc,例如
1sudo rm -rf /usr/local/include/google/protobuf - 根据1步骤中下载源码的Readme进行安装。
1234567cd ${your path}./autogen.sh 生成configure文件./configure --prefix=/usrmake# make checksudo make installsudo ldconfig # refresh shared library cache.注意,其中第二行命令可以通过--prefix指定地址。但是我嫌麻烦就没弄 ↵
至此,protoc --version已经变成了3.7.1 - 假设需要从protoc3再变回protoc2,需要重复1,2,3步骤(别忘了下载需要的2.8.0版本)。
- 如果还要换回protoc3,注意,只需要完成第2步,和第3步中的最后两行命令即可。同样的,从protoc3换回protoc2也是一样的操作。
12sudo make installsudo ldconfig # refresh shared library cache. - 以上一系列操作,不要删除编译的源码,否则需要重复第3步全部代码,很费时间。
2. Protobuf生成Go代码插件
1 2 3 4 5 6 7 8 9 |
$ export GO111MODULE=on # Enable module mode #这里需要确保${GOPATH}/bin位于环境变量path中 $ echo ${GOPATH} $ export PATH=${PATH}:${GOPATH}/bin $ go get google.golang.org/protobuf/cmd/protoc-gen-go \ google.golang.org/grpc/cmd/protoc-gen-go-grpc #在所在项目中,执行以下命令可指定版本 # go get github.com/golang/protobuf/protoc-gen-go@v1.0.0 |
3. 执行脚本
生成该目录下所有.proto文件为对应.go文件代码
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/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 |
微信赞赏
支付宝赞赏