Как сериализовать/десериализовать карту в go

Мой инстинкт подсказывает мне, что каким-то образом его нужно преобразовать в строку или байт [] (что может быть даже одним и тем же в Go?), а затем сохранено на диске.

Я нашел этот пакет (http://golang.org/pkg/encoding/gob/), но он выглядит как его только для структур?

Ответ 1

Существует несколько способов сериализации данных, и 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)
}

Игровая площадка

Ответ 2

Пакет gob позволит вам сериализовать карты. Я написал небольшой пример http://play.golang.org/p/6dX5SMdVtr, демонстрирующий карты кодирования и декодирования. Так же, как голова, пакет gob не может кодировать все, например каналы.

Изменить: также строковые и [] байты не совпадают в Go.