【发布时间】:2018-05-17 00:28:57
【问题描述】:
我需要序列化一些复杂的接口(template.Template)。它有许多未导出的字段,gob 不想使用它们。有什么建议吗?
附:实际上,我试图将解析后的模板放到 App Engine 上的内存缓存中。
【问题讨论】:
标签: serialization go gob
我需要序列化一些复杂的接口(template.Template)。它有许多未导出的字段,gob 不想使用它们。有什么建议吗?
附:实际上,我试图将解析后的模板放到 App Engine 上的内存缓存中。
【问题讨论】:
标签: serialization go gob
简短的回答是,未导出字段通常是有原因的——例如,template.Template 包含在解析过程中发生变化的信息——所以我建议不要使用reflect 自己序列化它们。但是,GobEncoder 和GobDecoder 接口最近被添加到gob;如果您需要序列化具有未导出字段的复杂结构,请鼓励包的作者实现这些接口。更好的是,自己实现它们(对于template.Template 和contribute 你的补丁应该不难。
【讨论】:
如果类型来自另一个包(例如模板),则无法使用任何当前的 Go 序列化库(gob、json、bson 等)来完成。也不不应该这样做,因为这些字段是未导出的。
但是,如果您真的需要,您可以使用包reflect,特别是Value.Field() 和朋友编写自己的序列化程序来获取未导出的字段。然后,您只需将它们存储在以后可以解码的方式中。
【讨论】: