0Pricing
Go Academy · Lekcja

encoding/csv

Odczytuj i zapisuj CSV

encoding/csv to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.

Czym jest CSV

CSV (comma-separated values) przechowuje dane tabelaryczne jako zwykły tekst: po jednym rekordzie w wierszu, z polami oddzielonymi przecinkami. Pakiet Go encoding/csv służy do odczytu i zapisu takich danych.

Odczytywanie z tekstu

Należy utworzyć reader na podstawie dowolnego io.Reader. strings.NewReader opakowuje string, dzięki czemu można przeprowadzić demonstrację bez pliku.

package main

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

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

Odczytywanie wszystkich rekordów

ReadAll odczytuje każdy wiersz do wartości typu [][]string. Każdy wewnętrzny slice zawiera pola jednego rekordu.

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

Odczytywanie wiersz po wierszu

W przypadku dużych plików należy odczytywać po jednym rekordzie za pomocą Read. Po zakończeniu metoda zwraca io.EOF.

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

Dostęp do pól

Każdy rekord jest slice'em stringów. Aby odczytać kolumnę, należy użyć indeksu.

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])
}

Niestandardowy separator

Należy ustawić r.Comma, aby użyć innego separatora, na przykład średnika lub tabulatora.

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

Zapisywanie CSV

csv.NewWriter zapisuje rekordy. Należy wywołać Flush, aby opróżnić bufor danych.

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

Zapisywanie wielu wierszy

WriteAll zapisuje całą wartość typu [][]string jednocześnie i automatycznie opróżnia bufor.

package main

import (
	"encoding/csv"
	"os"
)

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

Automatyczne ujmowanie w cudzysłowy

Writer ujmuje w cudzysłowy pola zawierające przecinki, cudzysłowy lub znaki nowej linii, dzięki czemu wynik pozostaje poprawnym plikiem CSV.

package main

import (
	"encoding/csv"
	"os"
)

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

Nie zapomnij o Flush

Writer buforuje dane. Jeśli nie wywołasz Flush (i nie użyjesz WriteAll), niektóre wiersze mogą nigdy nie zostać zapisane. Zawsze należy opróżnić bufor przed zakończeniem programu.

Obsługa błędów

Po opróżnieniu bufora należy sprawdzić w.Error(), aby wykryć błędy zapisu występujące podczas buforowania.

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

Szybkie sprawdzenie

Co zwraca metoda ReadAll readera CSV dla przeanalizowanych danych?

Podsumowanie

encoding/csv:

  • csv.NewReader wraz z Read lub ReadAll
  • csv.NewWriter wraz z Write/WriteAll, a następnie Flush
  • Należy ustawić Comma dla niestandardowych separatorów; ujmowanie w cudzysłowy odbywa się automatycznie

Często zadawane pytania

Czy lekcja „encoding/csv” jest bezpłatna?

Tak — pełny tekst „encoding/csv” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „encoding/csv”?

Odczytuj i zapisuj CSV Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Go Academy?

Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „encoding/csv”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?

Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Powtórka encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob i kodowanie binarne
← Powrót do Go Academy