Go:读取和编写压缩的gob到文件

时间:2014-07-25 09:29:22

标签: go

这似乎无法正常工作,我不确定自己做错了什么。我试图将地图转换为gob,gzip二进制文件并将其保存到文件中,然后再将其读回。

type Object struct {
mystruct map[string][]scorer
}

type scorer struct {
category int
score float64
}

func (t *Object) Load(filename string) error {

    fi, err := os.Open(filename)
    if err !=nil {
        return err
    }
    defer fi.Close()

    fz, err := gzip.NewReader(fi)
    if err !=nil {
        return err
    }
    defer fz.Close()

    decoder := gob.NewDecoder(fz)
    err = decoder.Decode(&t.mystruct)
    if err !=nil {
        return err
    }

    return nil
}

func (t *Object) Save(filename string) error {

    fi, err := os.Create(filename)
    if err !=nil {
        return err
    }
    defer fi.Close()

    fz := gzip.NewWriter(fi)
    defer fz.Close()

    encoder := gob.NewEncoder(fz)
    err = encoder.Encode(t.mystruct)
    if err !=nil {
        return err
    }

    return nil
}

某些保存到文件中并且gzip似乎有效,但它既不保存也不再重新加载。

我也不确定我是否正确地做到了这一点,因为我是Go的新手,而且我发现难以理解读者和作者,因为我和#39; m来自PHP而不习惯。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您的问题与读者和作者无关 :您无法对 un - 导出的字段进行编码/解码,并且所有字段都是未导出的(小写)。您必须使用MystructCategoryScore或编写自己的BinaryMarshal / BinaryUnmarshal,如http://golang.org/pkg/encoding/gob/#example__encodeDecode

中所述