2

正如协议缓冲区文档所述:

每个映射字段在类型结构中生成一个字段, 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 插件。

4

0 回答 0