Go:
Arbeta med CSV

Hur:

Att arbeta med CSV-filer i Go är okomplicerat, tack vare dess standardbibliotek, encoding/csv. Nedan följer en grundläggande guide för att läsa och skriva CSV-filer.

Läsa en CSV-fil

För att läsa från en CSV-fil öppnar du först filen med os.Open, skapar sedan en ny CSV-läsare med 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)
    records, err := reader.ReadAll()
    if err != nil {
        panic(err)
    }

    for _, record := range records {
        fmt.Println(record)
    }
}

Denna kodsnutt kommer att läsa alla poster från data.csv och skriva ut dem. Varje post är en skiva av fält.

Skriva till en CSV-fil

För att skriva använder du csv.NewWriter och writer.WriteAll eller writer.Write för att skriva flera eller en enskild CSV-post respektive.

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()

    records := [][]string{
        {"Name", "Age", "City"},
        {"John Doe", "30", "New York"},
        {"Jane Doe", "27", "Los Angeles"},
    }

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

Detta kommer att skapa en fil med namnet output.csv med de angivna posterna. Kom alltid ihåg att tömma skrivaren för att säkerställa att alla buffrade data skrivs till filen.

Fördjupning

Go encoding/csv-paketet ger robust stöd för läsning och skrivning av CSV-filer, men det är utformat med enkelhet i åtanke, vilket betyder att det inte hanterar mer komplexa scenarier såsom auto-upptäckt av avgränsare, hantering av citattecken eller inbäddade radbrytningar i fält utan manuell hantering.

Historiskt sett har hanteringen av CSV i programmeringsspråk ofta varit besvärlig på grund av dessa komplexiteter, men Gos standardbibliotek abstraherar många av dessa problem, vilket tillåter utvecklare att arbeta med CSV-data med relativ lätthet. Dock, för mer komplex CSV-manipulering, kan tredjepartsbibliotek som gocsv eller manuell tolkning vara nödvändig.

En anmärkningsvärd aspekt av Gos csv-paket är dess stöd för att specificera anpassade kommatecken (avgränsare), vilket gör att det kan arbeta sömlöst med varianter av CSV-filer, som flikavgränsade värden (TSV). Dock, när man hanterar mycket oregelbundna eller icke-standardiserade CSV-filer, kan Go-programmerare finna att de behöver utöka de befintliga csv-läsare- eller skrivareimplementeringarna.

Medan Gos förmåga att hantera CSV är robust för allmänna ändamål, för applikationer som kräver intensiv datamanipulation, såsom dataanalys eller komplexa datatransformationsuppgifter, kan programmerare överväga dedikerade dataprocessningspaket eller till och med andra språk mer lämpade för dessa uppgifter, som Python med dess pandas-bibliotek. Trots detta, för enkel CSV-läsning och skrivning, sticker Gos standardbibliotek ut för dess effektivitet och enkelhet.