Go:
Trabalhando com CSV

Como fazer:

Trabalhar com arquivos CSV em Go é direto, graças à sua biblioteca padrão, encoding/csv. Abaixo está um guia sobre ler e escrever arquivos CSV.

Lendo um Arquivo CSV

Para ler de um arquivo CSV, você primeiro abre o arquivo usando os.Open, e então cria um novo leitor CSV com csv.NewReader.

package main

import (
    "encoding/csv"
    "fmt"
    "os"
)

func main() {
    file, err := os.Open("data.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    reader := csv.NewReader(file)
    registros, err := reader.ReadAll()
    if err != nil {
        panic(err)
    }

    for _, registro := range registros {
        fmt.Println(registro)
    }
}

Este trecho de código lerá todos os registros de data.csv e os imprimirá. Cada registro é uma fatia de campos.

Escrevendo em um Arquivo CSV

Para escrever, você usa csv.NewWriter e writer.WriteAll ou writer.Write para escrever múltiplos ou um único registro CSV, respectivamente.

package main

import (
    "encoding/csv"
    "os"
)

func main() {
    file, err := os.Create("output.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    registros := [][]string{
        {"Nome", "Idade", "Cidade"},
        {"John Doe", "30", "Nova York"},
        {"Jane Doe", "27", "Los Angeles"},
    }

    if err := writer.WriteAll(registros); err != nil {
        panic(err)
    }
}

Isso criará um arquivo chamado output.csv com os registros fornecidos. Sempre lembre de usar flush no writer para garantir que todos os dados em buffer sejam escritos no arquivo.

Aprofundando

O pacote Go encoding/csv oferece suporte robusto para ler e escrever arquivos CSV, mas é projetado com simplicidade em mente, o que significa que ele não lida com cenários mais complexos, como detecção automática de delimitadores, lidar com aspas ou quebras de linha embutidas em campos sem manipulação manual.

Historicamente, o tratamento de CSV em linguagens de programação muitas vezes tem sido complicado devido a essas complexidades, mas a biblioteca padrão do Go abstrai muitos desses problemas, permitindo que os desenvolvedores trabalhem com dados CSV com relativa facilidade. No entanto, para manipulação de CSV mais complexa, bibliotecas de terceiros como gocsv ou manipulação manual da análise podem ser necessárias.

Um aspecto notável do pacote csv do Go é seu suporte para especificar vírgula personalizada (delimitador), o que permite trabalhar de forma transparente com variantes de arquivos CSV, como valores separados por tabulação (TSV). No entanto, ao lidar com arquivos CSV muito irregulares ou não padrão, programadores Go podem se encontrar precisando estender as implementações existentes de leitor ou escritor csv.

Embora as capacidades de manipulação de CSV do Go sejam robustas para fins gerais, para aplicações que requerem manipulação intensiva de dados, como ciência de dados ou tarefas complexas de transformação de dados, programadores podem procurar pacotes de processamento de dados dedicados ou até outras linguagens mais adequadas para essas tarefas, como Python com sua biblioteca pandas. No entanto, para operações de leitura e escrita de CSV diretas, a biblioteca padrão do Go se destaca por sua eficiência e simplicidade.