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