栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号