Proto3 如何处理双维数组?

proto3 如何处理双维数组?

proto3双维数组转换map的解决方案

proto3不支持多维数组。但其well-known types中的value、listvalue、struct支持任意json。多维数组可以用嵌套的listvalue实现,但数组结构无法在proto文件中体现。

在给出的示例中,viper可能无法自动处理以下结构:

type configreply_array2d struct {
    innerarray []*configreply_toolitem `protobuf:"bytes,1,rep,name=inner_array,json=innerarray,proto3" json:"inner_array,omitempty"`
}

因为proto3没有多维数组类型,innerarray错误地被转换成了map。

解决方案是使用well-known types:

message Array2D {
    ValueArray value_array = 1;
}

其中,valuearray是一个任意json数组的proto表示。在go代码中,valuearray会被转换为[]interface{}类型。你可以自己遍历和处理这个数组。

需要注意的是,使用well-known types后,proto文件中tool_item message的结构将丢失。

以上就是Proto3 如何处理双维数组?的详细内容,更多请关注硕下网其它相关文章!