记录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

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

相关推荐
笃行3509 小时前
向量数据库单独建一套,这笔账划不划算
后端
weixin_431600449 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
Rain的Java大神之路9 小时前
短信接口被狂刷怎么处理
java·运维·后端·web安全·面试·架构·xss
Lost of 程序猿10 小时前
AOP 实战:面向切面编程从理论到落地
后端·asp.net·aop·面向切片变成
Lost of 程序猿11 小时前
ASP.NET Core 认证授权实战:从 JWT 到 Policy,设计一套企业级 RBAC 权限系统
后端·asp.net
Lost of 程序猿11 小时前
ASP.NET Core 后台任务全景:从 BackgroundService 到 Channel 队列,再到分布式调度
后端·asp.net·.netcore
倾颜11 小时前
NestJS 核心概念梳理:从 Module、Controller 到 Guard、Interceptor
后端·node.js·nestjs
东风破_12 小时前
JWT 1:从一个登录请求开始,理解 React 项目里的 API 层与 Mock
前端·后端
东风破_12 小时前
JWT 3:为什么 Token 要放进 Authorization?Axios 拦截器到底解决了什么?
前端·后端
东风破_12 小时前
JWT 5:路由守卫是什么?把整个 JWT 登录鉴权流程串起来
前端·后端