最好的选择可能是使用gob包,并让您的结构实现GobDeprer和GobEnprer接口,以便对私有字段进行序列化和反序列化。
这将是安全,独立于平台且高效的。而且,您必须仅在具有未导出字段的结构上添加这些GobEnpre和GobDepre函数,这意味着您不会使其余代码杂乱无章。
func (d *Data) GobEnpre() ([]byte, error) { w := new(bytes.Buffer) enprer := gob.NewEnprer(w) err := enprer.Enpre(d.id) if err!=nil { return nil, err } err = enprer.Enpre(d.name) if err!=nil { return nil, err } return w.Bytes(), nil}func (d *Data) GobDepre(buf []byte) error { r := bytes.NewBuffer(buf) deprer := gob.NewDeprer(r) err := deprer.Depre(&d.id) if err!=nil { return err } return deprer.Depre(&d.name)}func main() { d := Data{id: 7} copy(d.name[:], []byte("tree")) buffer := new(bytes.Buffer) // writing enc := gob.NewEnprer(buffer) err := enc.Enpre(d) if err != nil { log.Fatal("enpre error:", err) } // reading buffer = bytes.NewBuffer(buffer.Bytes()) e := new(Data) dec := gob.NewDeprer(buffer) err = dec.Depre(e) fmt.Println(e, err)}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)