如何在不反射的情况下将结构转储到字节数组中?

如何在不反射的情况下将结构转储到字节数组中?,第1张

如何在不反射的情况下将结构转储到字节数组中?

最好的选择可能是使用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)}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5163448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存