php中文网

如何在 Protobuf 3 中处理多维数组?

php中文网

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 中处理多维数组?的详细内容,更多请关注php中文网其它相关文章!