的编码和解码结构
Encoding and decoding structs of
我正在尝试对结构进行编码和解码,我已经进行了大量搜索,很多关于此主题的问题通常是想要对基元或简单结构进行编码的人。我想要的是编码一个看起来像这样的结构:
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 编组来执行此操作,如果我使用指向另一个结构的指针,它将始终 return nil。有没有办法获取我想要的所有信息?
谢谢!
想象一下你的 struct ponts 到 /foo/bar/baz.txt 中的一个文件,然后你序列化你的结构。您将它发送到另一台计算机(可能在不同的操作系统中)和 re-create 结构。你期待什么?
如果在同一台计算机上序列化、删除文件(或更新内容)和re-create结构怎么办?
一种解决方案是存储文件的内容。
另一个解决方案是存储文件的路径,当您反序列化结构时,您可以尝试重新打开文件。您可以通过存储内容、大小和其他元数据的哈希值来添加安全层,以检查文件是否相同。
答案将指导您实现最佳实施
我正在尝试对结构进行编码和解码,我已经进行了大量搜索,很多关于此主题的问题通常是想要对基元或简单结构进行编码的人。我想要的是编码一个看起来像这样的结构:
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 编组来执行此操作,如果我使用指向另一个结构的指针,它将始终 return nil。有没有办法获取我想要的所有信息?
谢谢!
想象一下你的 struct ponts 到 /foo/bar/baz.txt 中的一个文件,然后你序列化你的结构。您将它发送到另一台计算机(可能在不同的操作系统中)和 re-create 结构。你期待什么?
如果在同一台计算机上序列化、删除文件(或更新内容)和re-create结构怎么办?
一种解决方案是存储文件的内容。
另一个解决方案是存储文件的路径,当您反序列化结构时,您可以尝试重新打开文件。您可以通过存储内容、大小和其他元数据的哈希值来添加安全层,以检查文件是否相同。
答案将指导您实现最佳实施