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

栏目: IT技术 · 发布时间: 4年前

内容简介:Go 团队Protocol Buffers 是谷歌开发的语言无关的数据交换格式,也是序列化结构数据的扩充机制,与 XML 类似,但是更小更简单。Go 的首个 Protocol Buffers 软件包已经发布了

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
github.com/golang/protobuf@v1.4.0
google.golang.org/protobuf@v1.20.0

转自 https://www.oschina.net/news/113960/a-new-go-api-for-protocol-buffers


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

跨越鸿沟

跨越鸿沟

[美] 杰弗里·摩尔(Geoffrey A. Moore) / 赵娅 / 机械工业出版社 / 2009-1 / 36.00元

在真正涉足高科技领域之前,你有必要读一读这本书——在这个节奏飞快、竞争激烈的技术竞技场上,这本书绝对能够帮助你更容易地获得成功。 ——威廉姆·劳森 罗盛软件公司董事会主席兼CEO 最近40年来,本书对高科技营销各个方面所做出的贡献远远超过了其他任何相关书籍。如今已经有无数企业和大学分别在自己的运营和教学过程中引入了鸿沟思想,如果你还不是这些企业或大学中的一员,你可能就要担心自己的未来了......一起来看看 《跨越鸿沟》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码