我和我的团队是 Go 的新手,我们有一个“标题”结构和多个“记录”结构,我们正试图将它们写入文件。然而,每当我们尝试通过重写来更新文件中的 Header 结构时,文件的其余部分就会被弄乱。
我们正在使用编码/解码:(dataFile 是从 os.Open 返回的)
dataFile.Seek(header.FreePtr,0) //seek to free space - could we just refactor and seek to end of file?
encoder := gob.NewEncoder((dataFile))
err = encoder.Encode(record)
if err != nil {
panic(err)
}
dataFile.Seek(header.FreePtr, 0)
decoder = gob.NewDecoder(dataFile)
r := Record{}
err = decoder.Decode(&r)
fmt.Println(r.Key)
fmt.Println(r.Width)
fmt.Println(string(r.Data))
header.FreePtr += int64(unsafe.Sizeof(record.Key)) + int64(unsafe.Sizeof(record.Width))+ int64(record.Width)
dataFile.Seek(0, 0)
encoder = gob.NewEncoder(dataFile)
err = encoder.Encode(header)
if err != nil {
panic(err)
}
有没有更好的方法来做到这一点?如果我们不需要更新标题,那能解决我们的问题吗?(始终编码到文件末尾,而不是尝试在添加记录之间的开头更新某些内容)。理想情况下,我们稍后可能需要一个标题,所以如果我们能保留它,那就太好了。
提前致谢!
茅侃侃
相关分类