0Pricing
Go Academy · Aula

JSON e CSV em streaming

json.Decoder e encoding/csv para grandes volumes de dados

JSON e CSV em streaming é uma aula grátis de Go Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Go Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Go Academy inclui 4 aulas no total.

Por que usar processamento em fluxo?

Carregar arquivos JSON ou CSV grandes inteiros na memória causa um uso elevado da memória dinâmica. O processamento em fluxo processa os registros um de cada vez, mantendo o uso de memória estável, independentemente do tamanho do arquivo.

json.Decoder para processamento em fluxo

json.NewDecoder envolve qualquer io.Reader. Use Token() para percorrer o fluxo de tokens JSON ou use Decode dentro de um laço para vetores JSON.

dec := json.NewDecoder(file)
// consume opening [
for dec.More() {
    var record Record
    dec.Decode(&record)
    process(record)
}

Detectando o início de um vetor

Chame dec.Token() para consumir o colchete de abertura antes do laço de decodificação:

t, _ := dec.Token() // consume [
for dec.More() {
    var r Record
    dec.Decode(&r)
}

Processamento em fluxo a partir de HTTP

Decodifique JSON diretamente do corpo de uma resposta HTTP sem armazenar toda a resposta em um buffer:

resp, _ := http.Get(url)
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
for dec.More() {
    var item Item
    dec.Decode(&item)
    process(item)
}

Leitor de encoding/csv

csv.NewReader lê CSV linha por linha. Defina LazyQuotes, TrimLeadingSpace e Comment para lidar com variantes de CSV do mundo real.

r := csv.NewReader(file)
for {
    record, err := r.Read()
    if err == io.EOF { break }
    if err != nil { return err }
    process(record)
}

Ignorando o cabeçalho CSV

Leia e descarte o primeiro registro para ignorar a linha do cabeçalho:

r.Read() // discard header
for {
    record, err := r.Read()
    if err == io.EOF { break }
}

csv.Writer

Grave CSV linha por linha com csv.NewWriter. Sempre chame w.Flush() e verifique w.Error() depois de gravar.

w := csv.NewWriter(file)
w.Write([]string{"name", "age"})
w.Flush()
if err := w.Error(); err != nil { return err }

Delimitador personalizado

Arquivos CSV às vezes usam ponto e vírgula ou tabulações. Defina r.Comma como a runa desejada.

r := csv.NewReader(file)
r.Comma = ';' // semicolon-separated

Linhas JSON em fluxo (NDJSON)

JSON delimitado por novas linhas (um objeto JSON por linha) é simples de processar em fluxo: leia linha por linha e desserialize cada linha de forma independente.

scanner := bufio.NewScanner(file)
for scanner.Scan() {
    var record Record
    json.Unmarshal(scanner.Bytes(), &record)
}

Transmissão do perfil de memória

Com o processamento em fluxo, a alocação no heap permanece em O(tamanho do registro), em vez de O(tamanho do arquivo). Para um arquivo de 1 GB com registros de 1 KB, o processamento em fluxo usa aproximadamente 1 KB, contra aproximadamente 1 GB no carregamento em memória.

Cancelamento do contexto no processamento em fluxo

Verifique ctx.Done() dentro do loop de decodificação para interromper o processamento em fluxo quando o contexto for cancelado, evitando que as goroutines continuem lendo até EOF.

for dec.More() {
    select {
    case <-ctx.Done():
        return ctx.Err()
    default:
    }
    dec.Decode(&record)
}

Verificação rápida

Qual é a vantagem de processar JSON em fluxo com json.Decoder em vez de usar json.Unmarshal?

Recapitulação: processamento em fluxo de JSON e CSV

Pontos principais:

  • json.Decoder: use um loop com dec.More() para matrizes JSON
  • csv.NewReader: leia linha por linha; defina Comma para delimitadores personalizados
  • NDJSON: bufio.Scanner + Unmarshal para cada linha
  • O processamento em fluxo mantém o uso de memória constante, independentemente do tamanho do arquivo

Perguntas Frequentes

A aula “JSON e CSV em streaming” é grátis?

Sim — o texto completo de “JSON e CSV em streaming” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Go Academy, atualize para CoddyKit PRO. O curso de Go Academy inclui 4 aulas no total.

O que vou aprender em “JSON e CSV em streaming”?

json.Decoder e encoding/csv para grandes volumes de dados Você pratica Go Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Go Academy?

Nenhuma experiência prévia é necessária. Go Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “JSON e CSV em streaming”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Go Academy?

Sim. Cada aula de Go Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Lendo arquivos com os e bufio
  2. Escrevendo arquivos e arquivos temporários
  3. Codificação e decodificação de JSON
  4. JSON e CSV em streaming
← Voltar para Go Academy