抖音项目——protobuf| 青训营笔记

425 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第10天

创作来源

QQ图片20230202130154.png

本篇笔记是我在查看项目方案说明时,偶然看到了项目好像是希望我们用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是一种语言中立、独立于平台、可扩展的序列化数据格式,可用于通信协议、数组存储等,具有前后兼容、多语言自动代码生成、性能快、压缩小等优点。