记录protoc生成代码将optional改成omitepty问题

问题现状

在修改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

这个方法最终生效了!!!

相关推荐
架构师沉默6 小时前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
开心就好20256 小时前
Win11 抓包工具怎么选?网页请求与设备流量抓取
后端·ios
爱丽_6 小时前
Spring 事务:传播行为、失效场景、回滚规则与最佳实践
java·后端·spring
用户3167361303427 小时前
SSE消息推送前后端代码
前端·后端
搬搬砖得了7 小时前
当 GraphQL 变成“全家桶”,Stream 写成“天书”,老板变身“谜语人”:我在代码屎山里的渡劫日常
后端
默海笑7 小时前
Java 基础 12:JavaDoc 生成文档 学习笔记
后端
写Cpp的小黑黑7 小时前
React Native 项目实战指南
后端
G探险者7 小时前
如何找到那些慢 SQL?
后端·sql
敖正炀8 小时前
线程池拒绝策略场景分析
后端
神奇小汤圆8 小时前
别再乱写并发了!弄懂阻塞队列,解决 90% 线程安全问题
后端