Parsing em GO com uso eficiente da memória

· 1 min

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 =