因为在proto3中,所有参数都是可选的,当参数未被设置并且消息被反序列化时,unset参数保持默认值。我找不到一种方法来检查是否设置了参数。是否有任何方法可以找到是否设置了与proto2相似的参数?我看到有一个方法has_(),但它是私有的。
发布于 2022-04-19 18:32:57
我认为这种区别在proto3中不再存在。我们鼓励您使用有意义的默认设置。
但如果必须的话,可以使用包含该值的奇异嵌入消息。
发布于 2022-04-20 02:23:47
发布于 2022-04-20 05:01:45
根据拉姆齐的回答,如果你真的需要Null的价值,你可以做的一件事是:
import "google/protobuf/struct.proto";
message Test {
oneof value_or_null {
string value = 1;
google.protobuf.NullValue null = 2;
};
}对于其中的一个,您将获得has_<param_name>()函数,并且您将能够检查是否有null或值。这也是一种更安全的方法,因为您不能设置这两个字段,其中一个实现将确保清除潜在的前一个字段值并设置新字段。
但是,这里)注意到,演化中的一个字段比演化的正常字段更复杂(您可以看到潜在的问题)。
我的建议
Null的真正需求,因此是对其中一个的真正需求。https://stackoverflow.com/questions/71929545
复制相似问题