如何在go中序列化/反序列化地图

时间:2013-11-04 05:55:47

标签: serialization go deserialization

我的直觉告诉我,不知怎的,它必须转换为字符串或字节[](甚至可能是Go中的相同内容?)然后保存到磁盘。

我找到了这个包(http://golang.org/pkg/encoding/gob/),但它似乎只适用于结构?

2 个答案:

答案 0 :(得分:15)

有多种方法可以序列化数据,Go为此提供了许多软件包。一些常见编码方式的包:

encoding/gob
encoding/xml
encoding/json

encoding/gob处理好地图。下面的示例显示了地图的编码/解码:

    package main

import (
    "fmt"
    "encoding/gob"
    "bytes"
)

var m = map[string]int{"one":1, "two":2, "three":3}

func main() {
    b := new(bytes.Buffer)

    e := gob.NewEncoder(b)

    // Encoding the map
    err := e.Encode(m)
    if err != nil {
        panic(err)
    }

    var decodedMap map[string]int
    d := gob.NewDecoder(b)

    // Decoding the serialized data
    err = d.Decode(&decodedMap)
    if err != nil {
        panic(err)
    }

    // Ta da! It is a map!
    fmt.Printf("%#v\n", decodedMap)
}

Playground

答案 1 :(得分:4)

gob包可以让你序列化地图。我写了一个小例子http://play.golang.org/p/6dX5SMdVtr来演示编码和解码映射。就像抬头一样,gob包不能编码所有内容,例如频道。

编辑:在Go中,字符串和[]字节也不相同。