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

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

相关推荐
有来技术1 小时前
Spring Boot 4 + Vue3 企业级多租户 SaaS:从共享 Schema 架构到商业化套餐设计
java·vue.js·spring boot·后端
东东5162 小时前
学院个人信息管理系统 (springboot+vue)
vue.js·spring boot·后端·个人开发·毕设
三水不滴2 小时前
Redis缓存更新策略
数据库·经验分享·redis·笔记·后端·缓存
小邓吖3 小时前
自己做了一个工具网站
前端·分布式·后端·中间件·架构·golang
大爱编程♡4 小时前
SpringBoot统一功能处理
java·spring boot·后端
码界奇点5 小时前
基于Gin与GORM的若依后台管理系统设计与实现
论文阅读·go·毕业设计·gin·源代码管理
迷迭香与樱花6 小时前
Gin 框架
go·gin
好好研究6 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
小马爱打代码7 小时前
Spring Boot:第三方 API 调用的企业级容错设计
java·spring boot·后端
csdn2015_8 小时前
springboot task
java·spring boot·后端