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

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

相关推荐
superman超哥17 小时前
Rust 范围模式(Range Patterns):边界检查的优雅表达
开发语言·后端·rust·编程语言·rust范围模式·range patterns·边界检查
云上凯歌17 小时前
02 Spring Boot企业级配置详解
android·spring boot·后端
秋饼18 小时前
【手撕 @EnableAsync:揭秘 SpringBoot @Enable 注解的魔法开关】
java·spring boot·后端
IT_陈寒18 小时前
Python 3.12 新特性实战:这5个改进让我的开发效率提升40%
前端·人工智能·后端
利兄的视界18 小时前
一步到位:M4 芯片 Mac 安装 PostgreSQL 16 并适配 pgvector 教程
后端·postgresql
GZKING18 小时前
ThinkPHP 8 报错"think\model\pivot" not found
后端
Smoothzjc18 小时前
👉 求你了,别再裸写 fetch 做 AI 流式响应了!90% 的人都在踩这个坑
前端·人工智能·后端
superman超哥19 小时前
Rust 或模式(Or Patterns)的语法:多重匹配的优雅表达
开发语言·后端·rust·编程语言·rust或模式·or patterns·多重匹配