gpt4 book ai didi

protocol-buffers - 如何在 protobuf 3 中定义可选字段

转载 作者:行者123 更新时间:2023-12-03 05:40:06 27 4
gpt4 key购买 nike

我需要在 protobuf(proto3 语法)中指定带有可选字段的消息。就proto 2语法而言,我想要表达的消息是这样的:

message Foo {
required int32 bar = 1;
optional int32 baz = 2;
}

根据我的理解,“可选”概念已从语法原型(prototype) 3 中删除(以及必需的概念)。尽管尚不清楚替代方案 - 使用默认值来声明发送者尚未指定字段,但如果默认值属于有效值域(例如考虑 bool 类型),则会产生歧义。

那么,我该如何对上面的消息进行编码呢?谢谢。

最佳答案

自 protobuf release 3.15 ,proto3 支持使用可选关键字(就像在 proto2 中一样)来给出标量字段存在信息。

syntax = "proto3";

message Foo {
int32 bar = 1;
optional int32 baz = 2;
}

为上面的可选字段生成一个has_baz()/hasBaz()方法,就像proto2中一样。

在底层,protoc 有效地将 可选 字段视为使用 oneof 包装器声明的,如 CyberSnoopy’s answer建议:

message Foo {
int32 bar = 1;
oneof optional_baz {
int32 baz = 2;
}
}

如果您已经使用过该方法,现在可以简化消息声明(从 oneof 切换到 可选)和代码,因为传输格式相同.

有关 proto3 中字段存在和可选的详细信息可以在 Application note: Field presence 中找到。文档。

历史记录:proto3 中对可选的实验性支持于 2020 年 4 月 23 日在 this comment 中首次宣布。 。使用它需要在版本 3.12-3.14 中传递协议(protocol) --experimental_allow_proto3_optional 标志。

关于protocol-buffers - 如何在 protobuf 3 中定义可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42622015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com