您现在的位置是:首页 > 文章详情

Protocol Buffers 引入新的 Go API,并无限期支持旧版本

日期:2020-03-10点击:457

Go 团队宣布推出 Protocol Buffers 新的 Go API(APIv2),并表示这是一个重要的修订版本。APIv2 主要提供了反射(Reflection)功能,开发者通过它能够检测 Protocol Buffers 类型系统的数值,但由于官方变更了 Message 的类型定义,因此 API 的新旧版本不兼容。

Protocol Buffers 是谷歌开发的语言无关的数据交换格式,也是序列化结构数据的扩充机制,与 XML 类似,但是更小更简单。

构建新 API 的动机

Go 的首个 Protocol Buffers 软件包已经发布了十年,在这十年里,此软件包与 Go 一起发展壮大,它的用户需求也有所增长。Go 官方提到,不少开发者希望编写使用反射(Reflection)来检查协议缓冲区(protocol buffer)消息的程序,但reflect反射软件包只可检测 Go 的类型和数值,会忽略来自协定缓冲区类型系统中的信息。例如,我们可能想编写一个遍历日志条目并清除任何注释为包含敏感数据的字段的函数,但由于注释字段不是 Go 类型系统的一部分,所以操作起来比较麻烦。

除此之外,开发者会使用协议缓冲区编译器生成的数据结构之外的其他数据结构,例如能够代表其消息类型在编译时未知的动态消息类型。最后,proto.Message也是常见的问题根源。

官方表示,上述三个问题都有一个共同的原因,也有一个共同的解决方案:Message接口应完全指定消息的行为,并且对Message值进行操作的函数应自由接受可以正确实现接口的任何类型。

由于Message在保持包 API 兼容的同时无法更改类型的现有定义,因此官方决定推出全新的 Protocol Buffers 模块,且新版本与旧版本不兼容。

Reflection(反射)就是新版本的旗舰功能,它提供了类似reflect反射软件包检测 Go 的类型和数值的功能。Protocol Buffers 的反射功能会根据 Protocol Buffers 的类型,提供检测系统数值的能力,该软件包包含了类型描述符,描述了来源文件和数值接口中定义的类型结构,其提供了检查和操作消息的能力。

官方把 Go Protocol Buffers 原来的版本称为 APIv1,而新版本称为 APIv2,由于 APIv1 和 APIv2 不兼容,因此针对每个版本使用了不同的模块路径。官方提到,因为每个开发者迁移到新版本的速度不同,且部分程序可能会持续使用旧版本,甚至在同一个程序中,也有可能会使用不同的 API 版本,因此官方目前打算无限期地支持 API​​v1。

  • github.com/golang/protobuf@v1.3.4 是最接近 APIv2 之前的 APIv1 版本
  • github.com/golang/protobuf@v1.4.0是根据 APIv2 实现的 APIv1 版本
  • google.golang.org/protobuf@v1.20.0是 APIv2 版本
原文链接:https://www.oschina.net/news/113960/a-new-go-api-for-protocol-buffers
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章