页首Html代码

返回顶部

google-protobuf库 在golang语言下的插件扩展

信息

谷歌官方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 ...

posted @ 2025-03-14 13:55  ayanmw  阅读(218)  评论(0)    收藏  举报

页脚Html代码