如何将Go地图序列化为protobuff

如何将Go地图序列化为protobuff,go,protocol-buffers,Go,Protocol Buffers,我正在学习教程,并开始学习如何将Go结构序列化/封送到协议缓冲区中。我的结构有一个映射,我找不到任何关于如何处理封送映射的文档 在以下内容中,我想序列化字段映射[string]string: Go结构: type Note struct { ID NoteID Fields map[string]string } protobuf模式: package internal; message Note { optional int64 ID = 1; op

我正在学习教程,并开始学习如何将Go结构序列化/封送到协议缓冲区中。我的结构有一个映射,我找不到任何关于如何处理封送映射的文档

在以下内容中,我想序列化
字段映射[string]string

Go结构:

type Note struct {
    ID     NoteID
    Fields map[string]string
}
protobuf模式:

package internal;

message Note {
    optional int64 ID = 1;
    optional map<string, string> Fields = 2;
}

我不知道最后一行要做什么,我搜索的任何内容都是关于将字段映射到protobuf方案,而不是将映射映射到protobuf方案。

是一种定义良好的searlization格式,使用它的好处之一,它为您生成所有数据结构(使用您最喜欢的语言)只需使用protobuf模式,例如,您不必手动进行封送或解封

,而我倾向于同意Yandry的观点,即我也会让proto为我创建Go存根,而不是尝试手动执行(这是一个要点),我也会对手动执行感兴趣。在一天结束时,代码必须在那里,因为automagic一代使用它,可能是基于反射?我猜是《星球大战》的时间了……使用源代码:)这里有一个例子,您可以检查生成的代码,查看名为children的映射,键和值的类型为string,生成的标记如下:
protobuf:“bytes,1,rep,name=children”json:“children,ommitempty”protobuf_键:“bytes,1,opt,name=key”protobuf_val:“bytes,2,opt,name=value”
。啊,谢谢。出于某种原因,我下面的示例执行手动封送和解封送。我明天可以测试一下。协议缓冲区和protobuf之间的语义区别是什么?您链接到的页面上到处都是协议缓冲区。Ops my bad我以为您在读取协议缓冲区后指的是通用协议缓冲区,但yes protocol buffer==protobuf:)
func MarshalNote(n *remember.Note) ([]byte, error) {
    return proto.Marshal(&Note{
        ID: proto.Int64(int64(n.ID))
        Fields: proto.???
    })
}