这似乎无法正常工作,我不确定自己做错了什么。我试图将地图转换为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而不习惯。
有什么想法吗?
答案 0 :(得分:5)
您的问题与读者和作者无关 :您无法对 un - 导出的字段进行编码/解码,并且所有字段都是未导出的(小写)。您必须使用Mystruct
,Category
和Score
或编写自己的BinaryMarshal / BinaryUnmarshal,如http://golang.org/pkg/encoding/gob/#example__encodeDecode