【问题标题】:Defined required fields in proto3在 proto3 中定义必填字段
【发布时间】:2021-12-10 11:08:40
【问题描述】:

我在 PHP 中使用带有 version3 的 protobuf。下面是我的原型文件

syntax ="proto3";

package message.events.user.v1;

message UserWasActivatedMessage {
  int32 userId = 1 ;
  string eventType = 2;
}

这是我的 proto 文件,每当我没有设置任何用户或事件 proto 时,都会自动将它们设置为我不想要的默认值,现在我希望用户在发送消息时明确定义每个值将减少不定义任何值的机会

【问题讨论】:

    标签: protocol-buffers protobuf-c proto3


    【解决方案1】:

    这是协议缓冲区的“功能”,不能使用标准 SDK 覆盖。见:

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

    我认为具有默认值的要求是在线消息的无模式性质的结果,其中必须包含所有字段并且无法将值指定为 nil。

    是的,nil 和 default 之间的含义有所不同,但您无法在协议缓冲区中反映这一点。

    【讨论】:

    • 这是否意味着我必须从我的代码中检查所有字段是否存在,而不是依赖从 protobuf 生成的代码
    • 当您创建 Protobuf 消息时,它将包含您未指定的任何字段的默认值。当您收到 Protobuf 消息时,它将包含任何未指定字段的默认值。所以,我认为您主要担心的是您无法区分 nil 和默认字段。这些被合并到默认值字段中。
    • 是的,所以现在我计划在发送之前验证它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2020-04-14
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多