How to serialize a complex interface with unexported fields?
I need to serialize some complex interfa开发者_如何学编程ce (template.Template). It has many unexported fields, and gob don't want to work with them. Any suggestions?
P.S. Actualy, I trying to put a parsed template to memcache on App Engine.
The short answer is that there's usually a reason for unexported fields--template.Template
, for instance, contains information which changes during parsing--so I'd advise against serializing them yourself with reflect
. However, the GobEncoder
and GobDecoder
interfaces were recently added to gob
; if you need to serialize a complex struct with unexported fields, encourage the author of the package to implement these interfaces. Even better, implement them yourself (shouldn't be hard for template.Template
) and contribute your patch.
If the type is from another package (such as template) this can't be done with any of the current serialization libs for Go (gob
, json
, bson, etc.). Nor should it be done, because the fields are unexported.
However, if you really need to, you can write your own serializer using package reflect
, specifically Value.Field()
and friends to get the unexported fields. Then you just need to store them in a way that you can decode later.
精彩评论