我正在使用这样定义的协议缓冲区:
message Index {
message albums {
repeated string name = 1;
}
map<string, albums> artists_albums= 1;
map<int32, albums> year_albums = 2;
}
它生成如下代码:
type Index struct {
ArtistsAlbums map[string]*IndexAlbums
YearAlbums map[int32]*IndexAlbums
}
如何让它生成IndexAlbums
类型的地图值,而不是*IndexAlbums
?
答案 0 :(得分:2)
如果您使用gogoprotobuf,则会有一个允许
的扩展名map<string, albums> artists_albums = 1 [(gogoproto.nullable) = false];
对于常规的goprotobuf,我不相信有办法。
可为空,如果为false,则生成没有指针的字段(请参阅下面的警告)。
关于可以为空的警告:根据协议 缓冲区规范,你应该能够判断一个字段是否是 设置或取消设置。使用nullable = false选项会丢失此功能, 因为您的非可空字段将始终设置。它可以被视为一个 协议缓冲区之上的层,在编组之前和之后 所有非可空字段都已设置,无法取消设置。