问题现状
在修改go项目的protoc文件,然后用protoc命令生成go代码的时候,会遇到将optional修改成omitempty的情况

问题产生的原因

是因为我的protoc版本是v4.25.1,而之前的版本是v4.22.1
产生的结果
这样修改会导致接口给前端返回的数组类型变成了null,而不是空数组。如果前端代码不严谨的话,就导致报错了。
解决过程
先是询问大模型,提供了很多方法,但都行不通。下面介绍一下行不通的方案。
- 重新安装protoc v4.22.1版本。但是的网上找了很多资料,发现只能下载源代码,需要自己编译。不能直接下载可执行文件。
- 用docker,在docker中安装protoc v4.22.1 生成代码
- 其他
最终,采用最简单的方式,即将修改的omitempty改回optional
bash
# 1. 备份文件
cp pb/code_review.api.v1.pb.go pb/code_review.api.v1.pb.go.bak
# 2. 使用简单的 sed 命令
sed -i.bak 's/omitempty/optional/g' pb/code_review.api.v1.pb.go
# 3. 验证
grep "optional" pb/code_review.api.v1.pb.go | head -3
这个方法最终生效了!!!