Go Academy · Lektion

encoding/csv

Læs og skriv CSV

Lektion 3 af 413 trin

encoding/csv er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad er CSV

CSV (kommaadskilte værdier) gemmer tabeldata som ren tekst, én post pr. linje, med felter adskilt af kommaer. Gos encoding/csv-pakke læser og skriver det.

Læsning fra en streng

Opret en læser fra enhver io.Reader. strings.NewReader omslutter en streng, så vi kan demonstrere det uden en fil.

package main

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

func main() {
	r := csv.NewReader(strings.NewReader("a,b,c"))
	rec, _ := r.Read()
	fmt.Println(rec)
}

Læsning af alle poster

ReadAll læser hver række ind i en [][]string. Hver indre slice er felterne i én post.

package main

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

func main() {
	data := "name,age\nAnn,30\nBob,25"
	r := csv.NewReader(strings.NewReader(data))
	records, _ := r.ReadAll()
	fmt.Println(records)
}

Læsning række for række

Ved store filer skal du læse én post ad gangen med Read. Den returnerer io.EOF, når der ikke er mere.

package main

import (
	"encoding/csv"
	"fmt"
	"io"
	"strings"
)

func main() {
	r := csv.NewReader(strings.NewReader("a,1\nb,2"))
	for {
		rec, err := r.Read()
		if err == io.EOF {
			break
		}
		fmt.Println(rec)
	}
}

Adgang til felter

Hver post er en slice af strenge. Indeksér den for at læse en kolonne.

package main

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

func main() {
	r := csv.NewReader(strings.NewReader("Ann,30"))
	rec, _ := r.Read()
	fmt.Println("name:", rec[0], "age:", rec[1])
}

Brugerdefineret skilletegn

Indstil r.Comma til at bruge et andet skilletegn, f.eks. et semikolon eller en tabulator.

package main

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

func main() {
	r := csv.NewReader(strings.NewReader("a;b;c"))
	r.Comma = ';'
	rec, _ := r.Read()
	fmt.Println(rec)
}

Skrivning af CSV

csv.NewWriter skriver poster. Kald Flush for at sende bufferede data videre.

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	w.Write([]string{"name", "age"})
	w.Write([]string{"Ann", "30"})
	w.Flush()
}

Skrivning af mange rækker

WriteAll skriver en hel [][]string på én gang og tømmer automatisk bufferen.

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	rows := [][]string{{"a", "1"}, {"b", "2"}}
	w.WriteAll(rows)
}

Automatiske anførselstegn

Skriveren sætter anførselstegn omkring felter, der indeholder kommaer, anførselstegn eller linjeskift, så outputtet forbliver gyldig CSV.

package main

import (
	"encoding/csv"
	"os"
)

func main() {
	w := csv.NewWriter(os.Stdout)
	w.Write([]string{"hello, world", "plain"})
	w.Flush()
}

Glem ikke Flush

Skriveren gemmer data i en buffer. Hvis du glemmer Flush (og ikke bruger WriteAll), bliver nogle rækker muligvis aldrig skrevet. Tøm altid bufferen, før programmet afsluttes.

Håndtering af fejl

Efter tømning af bufferen skal du kontrollere w.Error() for at opdage eventuelle skrivefejl, der opstod under buffering.

package main

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

func main() {
	w := csv.NewWriter(os.Stdout)
	w.Write([]string{"x", "y"})
	w.Flush()
	fmt.Fprintln(os.Stderr, w.Error())
}

Hurtigt tjek

Hvad returnerer en CSV-læsers ReadAll for de fortolkede data?

Opsummering

encoding/csv:

  • csv.NewReader med Read eller ReadAll
  • csv.NewWriter med Write/WriteAll og derefter Flush
  • Indstil Comma til brugerdefinerede skilletegn; anførselstegn sættes automatisk
Gratis at komme i gang

Lær Go med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “encoding/csv” gratis?

Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “encoding/csv”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “encoding/csv”?

Læs og skriv CSV Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Go Academy?

Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “encoding/csv”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Go Academy-lektion?

Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Opsummering af encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob og binær kodning
← Tilbage til Go Academy