我正在尝试将结构,或更准确地说是将结构的字节存储到磁盘。我有大量字节数据,我想压缩并存储在磁盘上并稍后恢复。这些数据对除我之外的任何其他应用程序没有任何意义。
我可以用 Gob 编码一个结构([]bytes of)并用 gzip 压缩它。我还可以解压缩结果数据。但是,当我尝试将 []byte 数据转换回失败的结构时-失败是一个奇怪的失败...不是错误,当我tmp
从函数中打印出来时,我得到
tmp {A: B:0 C:0}
然而我开始的结构是
type SomeStruct struct {
A string
B int64
C float64
}
var testStruct = SomeStruct{
A: "james bond",
B: 24,
C: 1.234,
}
这是我的功能
func GobToStruct(binaryBytes io.Reader) (SomeStruct, error) {
s, _ := ioutil.ReadAll(binaryBytes)
fmt.Println("read decompressed bytes ", string(s))
decoder := gob.NewDecoder(binaryBytes)
var tmp SomeStruct
if err := decoder.Decode(&tmp); err != nil {
if err != io.EOF && err != io.ErrUnexpectedEOF {
fmt.Println("gob failed ", err)
return tmp, err
}
}
fmt.Printf("tmp %+v\r\n", tmp)
return tmp, nil
}
我做错了什么,以便在取消数据后我不会将数据取回?