【发布时间】:2015-06-12 20:37:28
【问题描述】:
Google 已删除 proto3 中的未知字段。我很想听听这个选择背后的原因。另外,如果有人有任何方法可以复制 proto2 行为,我很想听听。
如果重要的话,我们正在用 Go 编写代码。
由于 proto3 和 grpc 是并行开发的,我也想接触 grpc 社区。p>
【问题讨论】:
-
这与您要“联系”谁无关。你在问一个关于协议缓冲区的问题。 gRPC 是另一回事。当然,它们是相关的,但您的问题不是关于 gRPC。
-
他们好像没说什么。作为一种猜测,它可能会清理接口:gRPC just fills your structs 而 proto needs to give you a message to pass along (并且您需要实际传递它以保持您的应用程序未知字段安全)。他们可能认为让调用者和被调用者一起升级更安全,就像当一个 Go 方法添加一个参数时,它的调用者也需要更新一样。作为一种解决方法,也许您可以将 proto3 映射用于新字段。
-
也许提供一个您使用“未知”字段的特定用例?
-
如果 protobuf 消息存储在数据库中,并且具有旧版本 protobuf 消息类型的客户端需要进行修改,而不会破坏使用当前版本 protobuf 的客户端写入的字段。同时更新所有客户端以获得最新的 protobuf 消息版本是不可能的。此外,不同的客户端类型具有不同的更新计划,因此需要在多个代码库之间协调更改。
-
当然,这会使发布工程变得更加困难,但这当然不是不可能的。使用内置的新 proto 定义首先发布所有组件就足够了,并且只有在下一个版本中才开始编写新字段。
标签: go protocol-buffers grpc proto3