首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >proto3检查是否设置了参数

proto3检查是否设置了参数
EN

Stack Overflow用户
提问于 2022-04-19 18:19:22
回答 3查看 832关注 0票数 3

因为在proto3中,所有参数都是可选的,当参数未被设置并且消息被反序列化时,unset参数保持默认值。我找不到一种方法来检查是否设置了参数。是否有任何方法可以找到是否设置了与proto2相似的参数?我看到有一个方法has_(),但它是私有的。

EN

回答 3

Stack Overflow用户

发布于 2022-04-19 18:32:57

我认为这种区别在proto3中不再存在。我们鼓励您使用有意义的默认设置。

但如果必须的话,可以使用包含该值的奇异嵌入消息

票数 0
EN

Stack Overflow用户

发布于 2022-04-20 02:23:47

似乎在Protobuf 3.15.0之后,您可以在C++中再次使用hasField

根据变化量g:

现在,Proto3字段之一有了检查它们在C++中是否存在的“有”方法。

票数 0
EN

Stack Overflow用户

发布于 2022-04-20 05:01:45

根据拉姆齐的回答,如果你真的需要Null的价值,你可以做的一件事是:

代码语言:javascript
复制
import "google/protobuf/struct.proto";

message Test {
  oneof value_or_null {
    string value = 1;
    google.protobuf.NullValue null = 2;
  };
}

对于其中的一个,您将获得has_<param_name>()函数,并且您将能够检查是否有null或值。这也是一种更安全的方法,因为您不能设置这两个字段,其中一个实现将确保清除潜在的前一个字段值并设置新字段。

但是,这里)注意到,演化中的一个字段比演化的正常字段更复杂(您可以看到潜在的问题)。

我的建议

  • 首先,我要确保对Null的真正需求,因此是对其中一个的真正需求。
  • 我将尝试使每个字段的默认值成为业务逻辑中的无效值(例如:带有0值的uint32 id无效,并返回一个错误)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71929545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档