我需要序列化一些复杂的接口(template.Template)。它有许多未被移植的领域,并且gob不想与它们一起工作。有什么建议吗?
P.S。 Actualy,我试图将解析后的模板放到App Engine上的memcache中。
答案 0 :(得分:5)
简短的回答是,通常有一个未导出字段的原因 - 例如template.Template
包含在解析过程中发生变化的信息 - 因此我建议不要使用reflect
自行序列化它们。但是,最近GobEncoder
和GobDecoder
接口已添加到gob
;如果需要使用未导出的字段序列化复杂的结构,请鼓励包的作者实现这些接口。更好的是,自己实施它们(template.Template
)和contribute你的补丁应该很难实现。
答案 1 :(得分:1)
如果类型来自另一个包(例如模板),则无法使用Go的任何当前序列化库(gob
,json
,bson等)来完成此操作。也不应该完成它,因为这些字段是未导出的。
但是,如果您确实需要,可以使用包reflect
编写自己的序列化程序,特别是Value.Field()
和朋友来获取未导出的字段。然后,您只需要以稍后可以解码的方式存储它们。