4
私はthisのチュートリアルに続き、シリアル化/マーシャルの構造体をプロトコルバッファに移動しました。私の構造体にはマップがあり、マップのマーシャリングを処理する方法に関するドキュメントは見つかりません。私はシリアライズしたい以下でGoのマップをprotobuffにシリアライズする方法
Fields map[string]string
:
ゴー構造体:
type Note struct {
ID NoteID
Fields map[string]string
}
いるProtobufスキーマ:
package internal;
message Note {
optional int64 ID = 1;
optional map<string, string> Fields = 2;
}
ゴーマーシャル:
func MarshalNote(n *remember.Note) ([]byte, error) {
return proto.Marshal(&Note{
ID: proto.Int64(int64(n.ID))
Fields: proto.???
})
}
私は最後の行のために何をすべきか分かりません。フィールドをprotobufスキームにマッピングすることについて話をし、protobufスキームにマップをマッピングすることについては話しません。
私はここでYandryに同意する傾向がありますが、私はプロトタイプを手動で作成しようとするのではなく、私のために作成するようにしています。それは私も手動でそれを行うに興味があるだろう。終わりには、オートマティック・ジェネレーションがそれを使用しているので、おそらくリフレクションに基づいて、コードがそこになければなりませんか?私はそれがスターウォーズの時間だと思う...ソースを使用してください:) –
ここに例がありますhttps://jacobmartins.com/2016/05/24/practical-golang-using-protobuffs/生成されたコードを確認することができます –
マップキーと値stringを持つ名前付きの子の場合、生成されたタグは次のようになります: 'protobuf:" bytes、1、rep、name = children "json:" children、omitempty "protobuf_key:"バイト、1、opt、name = key "protobuf_val:"バイト、2、opt、name = value " –