亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 proto3 oneof 功能復制字段名稱?

如何使用 proto3 oneof 功能復制字段名稱?

jeck貓 2024-01-28 16:59:53
Proto3 支持 oneof 功能,您可以在一條消息中包含多個字段,并且最多同時設置一個字段。由于一次會設置一個字段,因此原型模式中存在重復的字段名稱是合理的。問題是原型生成器將其視為重新定義。我想這樣做,因為在我的情況下,這使得 json 序列化變得JsonFormat簡單。例如,我可能喜歡message MyResponse {    int32 a = 1;    string b = 2;    oneof Properties {        PropertiesType1 properties = 3;        PropertiesType2 properties = 4;        PropertiesType3 properties = 5;        PropertiesType4 properties = 6;    }}有沒有辦法解決這個問題,或者必須努力重新定義原型?一個可能的解決方法可能是例如使用map<string, Properties> properties = 9;
查看完整描述

2 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

暫時忽略 JSON;在大多數語言/框架中,您將通過名稱訪問這些屬性,無論是獲取值還是檢查設置了哪一個。如果名稱沖突:你不能這樣做。

另外:anyof允許同一類型用于受歧視聯合中的多個成員,在這種情況下,您想要做的事情會變得更加混亂。

最后,回到 JSON:解析器看到"properties":-接下來它期望什么?一旦解析了該值,在可區分聯合中哪個字段被視為“設置”?

所以不,出于多種原因:這是不允許的。


查看完整回答
反對 回復 2024-01-28
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

我已經使用這種方式解決了 JSON 序列化的類似用例。


message MyResponse {

? ? int32 a = 1;

? ? string b = 2;

? ? oneof Properties {

? ? ? ? PropertiesType1 properties1 = 3 [json_name = "properties"];

? ? ? ? PropertiesType2 properties2 = 4 [json_name = "properties"];

? ? ? ? PropertiesType3 properties3 = 5 [json_name = "properties"];

? ? ? ? PropertiesType4 properties4 = 6 [json_name = "properties"];

? ? }

}

如果您使用 protoc 編譯器,這會起作用,但它不適用于 buf lint/build 等高級工具。希望這可以幫助。

查看完整回答
反對 回復 2024-01-28
  • 2 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號