我已经找到了处理这个问题的encoding/binary包,但它依赖于reflect包,所以无法处理非大写(即未导出)的结构体字段。尽管我花了一个星期的时间来解决这个问题,但我仍然有一个问题:如果结构体字段不应该被导出,那么如何将它们轻松地转换为二进制数据?
编辑:下面是一个例子。如果你将
Data
结构体中的字段名大写,那么它能正常工作。但是Data
结构体旨在成为一个抽象类型,因此我不想导出这些字段。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)
}
unsafe
可以做到你想要的。这取决于需求。 - ANisus