正如协议缓冲区文档所述:
每个映射字段在类型结构中生成一个字段,
map[TKey]TValue
其中TKey
字段的键类型TValue
是字段的值类型...
我想设置TValue
为一段字符串。所以在 Go 中它会生成:
map[string][]string
还考虑到关于重复字段的注释:
同样,对于字段定义
repeated bytes foo = 1;
,编译器将生成一个 Go 结构体,其中包含一个[][]byte
名为Foo
我正在尝试执行以下操作:
message CallBackUrl {
string base_url = 1;
map<string, repeated string> params = 2;
}
但这只是吐出一个错误:
pb/authenticator.proto:57:26: Expected ">"
我可以这样做:
message StringSlice {
repeated string slice = 1;
}
message CallBackUrl {
map<string, StringSlice> params = 1;
}
输出:
type StringSlice struct {
Slice []string
}
type CallBackUrl struct {
Params map[string]*StringSlice
}
但是,在实现Params
中将需要用作一个url.Values
来构建查询字符串。最后一个解决方案需要额外的迭代,并将数据复制到一个 newmap[string][]string
中,我想避免这种情况。
(如何)我可以让协议缓冲区生成字符串切片的(Go)映射吗?我正在使用 gRPC 插件。