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

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

相关推荐
techdashen2 小时前
Cloudflare 如何用 Rust 构建一个高性能解释器
开发语言·后端·rust
sing~~2 小时前
SpringCloud的了解和使用
后端·spring·spring cloud
神奇小汤圆2 小时前
K8s生产环境那些文档不会告诉你的坑
后端
流觞 无依2 小时前
Spring Boot 未授权访问漏洞排查与修复指南
java·spring boot·后端
Java开发的小李2 小时前
SpringBoot 高流量高并发 基础全面讲解
java·spring boot·后端·性能优化
Flynt2 小时前
Uber 75000测试类JUnit迁移:OpenRewrite+Bazel实战
后端
Kqwert2 小时前
C# PDF转图片工具类 - 基于Docnet和SkiaSharp的实现
后端
随风,奔跑2 小时前
Spring Cloud Alibaba(六)-链路追踪SkyWalking
java·后端·spring·skywalking
铁皮饭盒2 小时前
成为AI全栈 - 第1课:后端到底是干嘛的?一张图拆解登录
前端·后端·ai编程
Flynt3 小时前
LangGraph 生产环境跑了三个月,我的真实感受
后端