Pergunta

Preciso serializar alguma interface complexa (template.Template).Tem muitos campos não exportados e muitos não querem trabalhar com eles.Alguma sugestão?

P.S.Na verdade, estou tentando colocar um modelo analisado no memcache no App Engine.

Foi útil?

Solução

A resposta curta é que geralmente há um motivo para campos não exportados -template.Template, por exemplo, contém informações que mudam durante a análise - portanto, desaconselho serializá-las você mesmo com reflect.No entanto, o GobEncoder e GobDecoder interfaces foram adicionadas recentemente ao gob;se você precisar serializar uma estrutura complexa com campos não exportados, incentive o autor do pacote a implementar essas interfaces.Melhor ainda, implemente-os você mesmo (não deve ser difícil para template.Template) e contribuir seu patch.

Outras dicas

Se o tipo for de outro pacote (como template), isso não poderá ser feito com nenhuma das bibliotecas de serialização atuais para Go (gob, json, bson, etc.).Nem deve isso seja feito, porque os campos não são exportados.

No entanto, se você realmente precisar, você pode escrever seu próprio serializador usando o pacote reflect, especificamente Value.Field() e amigos para obter os campos não exportados.Depois, você só precisa armazená-los de uma forma que possa decodificar posteriormente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top