这是我参与「第五届青训营」伴学笔记创作活动的第10天
创作来源
本篇笔记是我在查看项目方案说明时,偶然看到了项目好像是希望我们用protobuf来做客户端和服务器的数据传输,但我此前用的多是json,就上网查阅了很多资料来学习,仅以此篇大致介绍一下protobuf。
1、protobuf 来源
Protocal Buffers(缩写为protobuf)是一种用于结构化数据序列化和反序列化的Google技术。
2.描述
协议缓冲区是一种与语言无关、独立于平台、可扩展的方式来序列化可用于(数据)通信协议、数据存储等的结构化数据。
Protocol Buffers 是一种灵活、高效且自动化的结构化数据序列化方法 - 类似于 XML,但比 XML 更小(3 ~ 10 倍)、更快(20 ~ 100 倍)和更简单。
3.普遍化
简而言之,protobuf 是一种序列化和反序列化数据的方法,类似于 XML、Json、Java 的 Serializable 等。 然而,protobuf比XML和JSON更有效,但protobuf产生的字节码的可读性略低。
4、使用要点
1. 包名冲突
在 Go 中,协议缓冲区的包名用作 Go 包,除非指定go_package。即使您确实提供了go_package,您仍应在 .proto 文件中定义包名称,以避免协议缓冲区命名空间和非 Go 语言中的名称冲突
2.字段设置
在字段值为空的情况下,则使用默认值:数字类型为0,字符串为空字符串,布尔值为false。对于嵌入消息,默认总是消息的默认实例或原型,其中没有设置字段。调用访问器来获取未显式设置的字段的值总是返回该字段的默认值。
当字段是可重复的,则该字段可以重复任意次数,包括零。重复值的顺序保留在协议缓冲区中。将可重复字段视为可变长度数组。
3.其他
- 命名:消息服务名称、带驼峰的方法名称、带下划线的字段、带大写下划线的枚举
- 没有历史包袱,使用proto3,proto2也尽量不要使用要求
- 不要修改旧字段,不要重复使用标签值
- 为最常用的字段保留 1-15 的序数
- 可以使用 json 转换,使用 pbjson 库
总结
Protocol Buffer是一种语言中立、独立于平台、可扩展的序列化数据格式,可用于通信协议、数组存储等,具有前后兼容、多语言自动代码生成、性能快、压缩小等优点。