【问题标题】:How is protobuf 3 singular different than optionalprotobuf 3 单数与可选有何不同
【发布时间】:2017-11-16 22:12:40
【问题描述】:

看proto3参考:

https://developers.google.com/protocol-buffers/docs/proto3#simple

上面提到了singular

singular: a well-formed message can have zero or one of this field (but not more than one).

我不清楚这与optional 有何不同。 singular 只是一种明确的方式来说明某事是optional(现在对于 proto3 是隐含的)?或者还有其他我想念的东西吗?

谢谢。

【问题讨论】:

    标签: protocol-buffers


    【解决方案1】:

    可选的是proto2 语法。单数是proto3 语法。

    在 proto3 中,singular 是默认规则。今天文档需要改进,还有一个未解决的问题:google/protobuf#3457

    另见google/protobuf#2497 why messge type remove 'required,optional'?,以及哈伯曼对GoogleCloudPlatform/google-cloud-python#1402的评论:

    我认为问题是:你想做什么?为什么相关 给你一个字段是否设置以及你打算做什么 这些信息?

    在 proto3 中,标量字段的字段存在根本不存在。您的 proto3 的心智模型应该是它是一个 C++ 或 Go 结构。为了 整数和字符串,没有设置与否,它 总是有价值的。对于子消息,它是指向子消息的指针 可以为 NULL 的实例,这就是为什么你可以测试它的存在。

    【讨论】:

    • 只是为了澄清你在说什么:我知道 optional 是在 proto2 中而不是在 proto3 中,而单数是在 proto3 中而不是在 proto2 中。您是说“单数字符串名称”与 proto3 中的“字符串名称”在功能上没有区别吗?如果是这样,为什么要添加“单数”?
    • 是的,它是一样的,因为singular 是默认规则。文档应该更新,请参阅问题google/protobuf#3457
    • 酷。最后一条评论(和链接)回答了我的问题。你能把它放在你的答案中,我会接受。感谢您的帮助!
    猜你喜欢
    • 2023-01-19
    • 2017-07-26
    • 1970-01-01
    • 2022-08-10
    • 2016-11-27
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多