Parsing em GO com uso eficiente da memória
Resumo #
Por que vale usar json.NewDecoder (e cia) para fazer streaming de dados gigantes em Go sem estourar memória.
Decodificando sem copiar tudo #
Ao invés de ler todo o fluxo gulosamente em memória e passá-lo para json.Unmarshal:
json.Unmarshal(umMonteDeBytes, &minhaStruct)
Nós podemos delegar a leitura do fluxo para os nossos queridos mestres da golang:
json.NewDecoder(meuIOReader).Decode(&minhaStruct)
E ler arquivos de multi-giga(tera?)bytes sem suor. Também funciona com xml.NewDecoder.
Quando lembrar disso #
Sempre que o input vier de io.Reader (arquivo enorme, pipe de rede, stdin), deixar o decoder cuidar do streaming evita peaks de memória e fica mais elegante.
_
= M =