惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
Webroot Blog
Webroot Blog
PCI Perspectives
PCI Perspectives
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
H
Heimdal Security Blog
H
Help Net Security
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
F
Full Disclosure
小众软件
小众软件
S
Securelist
罗磊的独立博客
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
S
Schneier on Security
D
DataBreaches.Net
M
MIT News - Artificial intelligence
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
T
Tenable Blog
The Register - Security
The Register - Security
C
Check Point Blog
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google Online Security Blog
Google Online Security Blog
博客园 - 叶小钗
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 司徒正美

博客园 - ayanmw

极度推荐: 9router 一个npm服务,可以让你将白嫖到的所有AI token以及付费API都集中到一起 开源项目介绍 OpenTeam 命令行 检测验证网站的 SSL证书 是否安全 Nginx 使用自签名 SSL 证书 关闭夸克浏览器在windows资源管理器中,图片右键菜单的万能转换开关 golang的defer 深坑 Windows Terminal 清屏方法 Ctrl+Shift+K 免费二级域名以及设置SSL证书和解析 docker加速镜像 golang + AI 写一个可以 一键让nas下载百度网盘链接的文件 的程序 raid 为什么而不可以两个硬盘交叉读写和交叉备份? golang 空切片和nil切片 有区别吗? golang json库 忽略 omitempty Go语言: golang如何判断一个结构体的一个方法是匿名组合的,还是该结构体自己的方法? golang 获得一个结构体的字节大小 吐槽 WPS 流氓行为: WPS 未经用户允许, 就建立了 WPS本地云盘 , 然后 云文档的文件 莫名其妙的的被删除了, 现在只能开会员恢复WPS云空间回收站的文件. 预测未来会有 内嵌AI大模型的游戏 好奇: windows10+都可以运行多个linux子系统了,为什么不支持运行多个windows子系统呢? gorm使用事务并发情况下切有最大mysql连接数限制的情况下的BUG,踩坑了 2024年 个人养老金 账户 应知应会 两个Mysql唯一索引的交换: 避免重复索引 Duplicate entry '3' for key 'priority_UNIQUE'
google-protobuf库 在golang语言下的插件扩展
ayanmw · 2025-03-14 · via 博客园 - ayanmw

信息

谷歌官方protobuf库为: https://github.com/protocolbuffers/protobuf (最近的protoc版本是: v30.1 2025年3月构建,从v3.20.1 以后 就修改了主版本号,去掉了3.前缀,而把后面的版本号作为了主版本号)

golang的插件库为:
早期版本是: https://github.com/golang/protobuf 但是已经停止维护了(最近的版本是v1.5.4更新在2024年 但是已经没有核心改进了),转向下面的官方库
https://google.golang.org/protobuf 实际代码仓库是: https://github.com/protocolbuffers/protobuf-go (最近的版本是:v1.36.5 2025年2月,首个版本是v1.20.0 2020年3月

从v1.5.4 到 v1.20.0 之间是保留的版本号,但是基本不会再使用了.

特别介绍下 非官方的 protobuf-go的实现

gogo库:https://github.com/gogo/protobuf (最近版本是: Release v.1.3.2 2021年构建 测试于: go 1.15.6 protoc 3.14.0)
这个库包含很多个插件,我之前经常使用的是 protoc-gen-gogofaster

protoc-gen-gofast protoc-gen-gogofast (same as gofast, but imports gogoprotobuf) protoc-gen-gogofaster (same as gogofast, without XXX_unrecognized, less pointer fields) protoc-gen-gogoslick (same as gogofaster, but with generated string, gostring and equal methods)
一下是AI总结的几个工具的特点

一、性能优化类工具
‌protoc-gen-gofast‌
生成代码时跳过部分反射和校验逻辑,牺牲部分安全性换取更快的序列化速度‌。
‌protoc-gen-gogofast‌
在 gofast 基础上进一步优化,默认启用 gogoprotobuf 的性能增强特性(如更紧凑的编码格式)‌。
‌protoc-gen-gogofaster‌
比 gogofast 更激进,通过引入 unsafe 操作减少内存分配,性能更高但可能影响跨平台兼容性‌。

二、功能扩展类工具
‌protoc-gen-gogo‌
主插件,支持 gogoprotobuf 全部扩展特性(如自定义类型、更灵活的字段标记),生成代码兼容标准 Protobuf 但功能更丰富‌12。
‌protoc-gen-gogoslick‌
在 gogo 基础上增加辅助方法(如 MarshalTo、Unmarshal 的快捷实现),提升开发便利性‌。
‌protoc-gen-gogotypes‌
生成类型别名和辅助结构体,用于解决复杂嵌套类型的代码可读性问题‌。

三、辅助工具
‌protoc-gen-combo‌
支持组合多个插件的输出结果,允许在单次编译中生成混合特性的代码(如同时启用性能优化和类型扩展)‌。
‌protoc-gen-gostring‌
为所有生成的结构体自动实现 String() 方法,便于调试和日志输出‌12。

四、与官方工具对比
官方 protoc-gen-go 仅生成符合标准 Protobuf 规范的代码,而 gogo 系列插件通过扩展语法和优化代码结构,提供更高的灵活性和性能‌25。例如,gogofaster 生成的代码比官方版本序列化速度快 2-5 倍‌12。


‌使用建议‌

若需高性能:优先选择 gogofaster 或 gogofast‌12;
若需兼容性:使用 gogo 或官方插件‌25;
若需调试便利性:搭配 gostring 插件生成 String() 方法‌12。

再介绍一下 一个protobuf工具链的工具 buf

源码地址: https://github.com/bufbuild/buf (最新版本v1.50.1 2025年3月构建

官方的protoc和protoc-gen-go 等都需要自行组装,并没有完整的生态工具链,虽然也不算太复杂,一般都是直接在shell中通过传参的形式来调用.缺乏统一的工具链整合‌。

而buf工具,则弥补了不足:

buf 专为 ‌Protobuf 生态管理‌设计,提供完整的工具链(包括依赖管理、代码生成、lint 校验等)‌。
支持通过 buf.yaml 声明模块依赖,并支持从 BSR(Buf Schema Registry)拉取远程依赖‌。
整合了 ‌CI/CD 支持‌,可通过配置文件 (buf.gen.yaml) 统一管理 Protobuf 插件的安装和生成流程‌。

具体请看文档: https://buf.build/docs/cli/quickstart/ https://buf.build/docs/configuration/v2/buf-gen-yaml/

不过 这个不是必须的,也就这两天突然看到了,记一下;

自己开发一个protobuf的插件

todo ...