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.NewReaderwraz zReadlubReadAllcsv.NewWriterwraz zWrite/WriteAll, a następnieFlush- Należy ustawić
Commadla 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.