我已经找到了encoding/binary个包来处理它,但它依赖于reflect个包,所以它不能处理未资本化(即未报告的) struct 字段.然而,我花了一周的时间来解决这个问题,我仍然有一个问题:如果不应该导出struct字段,我如何轻松地将它们转储到二进制数据中?
这里有个例子.如果将Data
struct的字段名称大写,则可以正常工作.但是Data
struct是一个抽象类型,所以我不想导出这些字段.
package main
import (
"fmt"
"encoding/binary"
"bytes"
)
type Data struct {
id int32
name [16]byte
}
func main() {
d := Data{Id: 1}
copy(d.Name[:], []byte("tree"))
buffer := new(bytes.Buffer)
binary.Write(buffer, binary.LittleEndian, d)
// d was written properly
fmt.Println(buffer.Bytes())
// try to read...
buffer = bytes.NewBuffer(buffer.Bytes())
var e = new(Data)
err := binary.Read(buffer, binary.LittleEndian, e)
fmt.Println(e, err)
}