生成Protobuf的Go代码(20240918更新)

Protobuf生成Go代码插件

1. 安装protoc

wget 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

发表评论

邮箱地址不会被公开。 必填项已用*标注