proto3 语法如何定义值为 slice 类型的 map?

1. 问题描述:proto3 语法如何定义值为 slice 类型的 map?

proto3 语法如何定义值为 slice 类型的 map?
定义 map 的语法如下:

 syntax = "proto3";
 ...
 import "google/protobuf/duration.proto";
 //1.  map 值为 string 类型
 map<string, string> shop = 1;
 //2.  map值为结构体,如下
 message Goods {
  message packageItem {
   int64 item = 1;
   int64 num = 2;
  }  
  repeated packageItem package = 1;
  float money = 2;
 }
 map<string, Goods> shop = 1;
// map 值为切片时,不知道如何定义,切片的定义使用 repeated 关键字。 下面两种试了下都不对。未找到类似的解决方案。
repeated  map<string, Goods> shop = 1;
map<string,repeated Goods> shop = 1;

2. 如何解决此问题?

最佳答案

我也怀着好奇心去看了下文档,好像目前不支持这个结构,你可以多嵌一层message,在message里放slice,类似这样

message Goods {
  message packageSlice{
    message packageItem {
        int64 item = 1;
        int64 num = 2;
      }
    repeated packageItem  slice= 1;
  }
  map<string, packageSlice> shop = 1;
}
1年前 评论
讨论数量: 6

Goods定义和你问题描述一样

message Test {
  map<string, Goods> shop = 1;
 }

1年前 评论
Bunny3936 1年前

我也怀着好奇心去看了下文档,好像目前不支持这个结构,你可以多嵌一层message,在message里放slice,类似这样

message Goods {
  message packageSlice{
    message packageItem {
        int64 item = 1;
        int64 num = 2;
      }
    repeated packageItem  slice= 1;
  }
  map<string, packageSlice> shop = 1;
}
1年前 评论

有支持的 repeated google.protobuf.ListValue lists = 2;

1年前 评论
Cliffs (楼主) 1年前
AB (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!