如何让protoc使用值而不是指针作为Go的地图的值侧?

时间:2018-01-03 02:41:23

标签: go protocol-buffers

我正在使用这样定义的协议缓冲区:

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

1 个答案:

答案 0 :(得分:2)

如果您使用gogoprotobuf,则会有一个允许

的扩展名
map<string, albums> artists_albums = 1 [(gogoproto.nullable) = false];

对于常规的goprotobuf,我不相信有办法。

  

可为空,如果为false,则生成没有指针的字段(请参阅下面的警告)。

     

关于可以为空的警告:根据协议   缓冲区规范,你应该能够判断一个字段是否是   设置或取消设置。使用nullable = false选项会丢失此功能,   因为您的非可空字段将始终设置。它可以被视为一个   协议缓冲区之上的层,在编组之前和之后   所有非可空字段都已设置,无法取消设置。