protobuf是一种将结构化数据序列化的机制, 可用于内部设备通信或存储. 与JSON格式相比, 基于protobuf协议的二进制文件体积更小, 解析速度更快.

protobuf简介

类型

类型 解释
float, double 浮点数
int32, int64, uint32, uint64 整数,但不适合编码较大的数字和负数
sint32, sint64 针对负数进行优化的整数类型
fixed32, fixed64, sfixed32, sfixed64 更适合大数字的有符号数或无符号数
bool 布尔值
string 任意的UTF-8字符串
byte 任意的字节

protobuf对数字存储进行了优化,一个数字越小则存储长度越短。由于计算机使用补码表示负数,因此通常情况下负数将使用多个字节表示。为了优化这种情况,sint类型使用交叉的方式表示,绝对值较小的负数依然可以获得较短的存储长度。

protobuf命名冲突解决方案

对于PB的namespace, 规范要求每个PB都是全局唯一的. 如果设计不合理就会导致PB名称冲突, 对于高版本的依赖库, Go语言在启动时会直接painc, 导致系统无法启动.

对于上述问题, 可以通过降级依赖版本临时解决:

1
2
3
4
replace (
github.com/golang/protobuf => github.com/golang/protobuf v1.4.3
google.golang.org/protobuf => google.golang.org/protobuf v1.25.0
)

最后更新: 2023年08月30日 14:44

版权声明:本文为原创文章,转载请注明出处

原始链接: https://lizec.top/2022/07/23/protobuf%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/