4

我需要序列化一些复杂的接口(template.Template)。它有许多未导出的字段,gob 不想使用它们。有什么建议么?

PS 实际上,我试图将解析后的模板放到 App Engine 上的内存缓存中。

4

2 回答 2

5

简短的回答是,未导出字段通常是有原因的template.Template——例如,包含在解析过程中发生变化的信息——所以我建议不要自己序列化它们reflect。但是,GobEncoderGobDecoder接口最近被添加到gob; 如果您需要序列化具有未导出字段的复杂结构,请鼓励包的作者实现这些接口。更好的是,自己实现它们(应该不难template.Template)并贡献你的补丁。

于 2011-05-13T21:17:12.943 回答
1

如果类型来自另一个包(例如模板),则无法使用 Go 的任何当前序列化库(gob、、、jsonbson 等)来完成。也不应该这样做,因为这些字段是未导出的。

但是,如果您真的需要,您可以使用 package 编写自己的序列化程序reflect,特别是Value.Field()和朋友一起获取未导出的字段。然后,您只需要以以后可以解码的方式存储它们。

于 2011-05-13T16:32:24.253 回答