为了账号安全,请及时绑定邮箱和手机立即绑定

的编码和解码结构

的编码和解码结构

Go
HUH函数 2022-11-28 14:41:09
我正在尝试编码和解码结构,我已经搜索了很多关于这个主题的很多问题通常是想要编码基元或简单结构的人。我想要的是编码一个看起来像这样的结构:    Name string               Id   int                   file *os.File              keys *ecdsa.PrivateKey }名称和 ID 没有问题,我可以使用 gob 或 json 编组对它们进行编码。但是,当我想使用 gob 对文件进行编码时gob.Register(os.File{}),由于文件结构中的字段是小写,我会收到一个错误,指出文件没有导出的字段。我会使用这样的功能    buf := bytes.Buffer{}    enc := gob.NewEncoder(&buf)    gob.Register(big.Int{})...    err := enc.Encode(&p)    if err != nil {        log.Fatal(err)    }    fmt.Println("uncompressed size (bytes): ", len(buf.Bytes()))    return buf.Bytes()}我不确定在编码函数中注册是否正确,但是我必须注册所有被引用的结构以用于我要编码的一个特定结构,这似乎很奇怪。例如对于一个文件,我将不得不注册大量的接口,这似乎不是正确的方法。有没有一种简单的方法来编码和解码具有更多复杂性的结构。如果我使用 json 编组来执行此操作,如果我使用指向另一个结构的指针,它将始终返回 nil。有没有办法获得我想要的所有信息?
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

想象一下你的 struct ponts 到 /foo/bar/baz.txt 中的一个文件,然后序列化你的结构。您将它发送到另一台计算机(可能在不同的操作系统中)并重新创建结构。你能指望什么?

如果在同一台计算机上序列化、删除文件(或更新内容)并重新创建结构会怎样?

一种解决方案是存储文件的内容。

另一种解决方案是存储文件的路径,当您反序列化结构时,您可以尝试重新打开文件。您可以通过存储内容、大小和其他元数据的哈希值来添加安全层,以检查文件是否相同。

答案将指导您实现最佳实施


查看完整回答
反对 回复 2022-11-28
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信