Question

J'ai besoin de sérialiser une interface complexe (template.emplate). Il a de nombreux champs non conformés, et Gob ne veut pas travailler avec eux. Aucune suggestion?

PS réely, j'essaie de mettre un modèle analysé sur Memcache sur App Engine.

Était-ce utile?

La solution

La réponse courte est qu'il y a généralement une raison pour les champs non approuvés -template.Template, par exemple, contient des informations qui changent pendant l'analyse - donc je conseille de les sérialiser vous-même avec reflect. Cependant, le GobEncoder et GobDecoder Des interfaces ont récemment été ajoutées à gob; Si vous avez besoin de sérialiser une structure complexe avec des champs non approuvés, encouragez l'auteur du package à mettre en œuvre ces interfaces. Encore mieux, mettez-les en œuvre vous-même (ne devrait pas être difficile pour template.Template) et contribuer votre patch.

Autres conseils

Si le type provient d'un autre package (comme le modèle), cela ne peut pas être fait avec aucune des libs de sérialisation actuelgob, json, bson, etc.). Ni devrait Cela est fait, car les champs sont inexportés.

Cependant, si vous en avez vraiment besoin, vous pouvez écrire votre propre sérialiseur à l'aide du package reflect, Plus précisément Value.Field() et des amis pour obtenir les champs non conformés. Ensuite, il vous suffit de les stocker d'une manière que vous pouvez décoder plus tard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top