如何在 Protobuf 3 中处理多维数组?
proto3 与多维数组
protobuf 3 不原生支持多维数组。但是,它的 well-known types(例:value、listvalue 和 struct)提供对任意 json 的支持。可以使用嵌套的 listvalue 来表示多维数组,但这意味着数组的详细结构(如维度、元素类型)不能在 proto 文件中定义。
在当前情况下,生成的代码中出现了额外的 innerarray 字段。这是因为 viper 无法自动处理 proto3 中的 well-known types。
要解决此问题,建议在 proto 文件中将 array2d 替换为嵌套的 listvalue:
message tool_bar { message tool_item { string name = 1; string role = 2; } repeated listvalue column = 1; }
然后在 go 代码中使用 listvalue 类型:
type ConfigReply_ToolBar struct { Column []*ListValue `protobuf:"bytes,1,rep,name=column,json=column,proto3"` }
这样,viper 就可以成功解析 viper 生成的结构。
以上就是如何在 Protobuf 3 中处理多维数组?的详细内容,更多请关注硕下网其它相关文章!