encoding/csv
Читайте и записывайте CSV
«encoding/csv» — бесплатный урок Go Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Что такое CSV
CSV (значения, разделённые запятыми) хранит табличные данные в виде обычного текста: одна запись в каждой строке, поля разделены запятыми. Пакет Go encoding/csv считывает и записывает такие данные.
Чтение из строки
Создайте средство чтения из любого io.Reader. strings.NewReader оборачивает строку, поэтому для демонстрации не нужен файл.
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a,b,c"))
rec, _ := r.Read()
fmt.Println(rec)
}Чтение всех записей
ReadAll считывает все строки в [][]string. Каждый вложенный срез содержит поля одной записи.
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)
}Чтение по строкам
Для больших файлов считывайте по одной записи за раз с помощью Read. После завершения метод возвращает 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)
}
}Доступ к полям
Каждая запись является срезом строк. Обращайтесь к нему по индексу, чтобы прочитать столбец.
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])
}Пользовательский разделитель
Задайте для r.Comma другой разделитель, например точку с запятой или табуляцию.
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)
}Запись CSV
csv.NewWriter записывает записи. Вызовите Flush, чтобы передать накопленные данные дальше.
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()
}Запись нескольких строк
WriteAll за один раз записывает весь [][]string и автоматически сбрасывает буфер.
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
rows := [][]string{{"a", "1"}, {"b", "2"}}
w.WriteAll(rows)
}Автоматическое заключение в кавычки
Средство записи заключает в кавычки поля, содержащие запятые, кавычки или переводы строк, поэтому вывод остаётся допустимым CSV.
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"hello, world", "plain"})
w.Flush()
}Не забывайте о Flush
Средство записи буферизует данные. Если забыть вызвать Flush (и не использовать WriteAll), некоторые строки могут так и не записаться. Всегда сбрасывайте буфер перед завершением программы.
Обработка ошибок
После сброса буфера проверьте w.Error(), чтобы обнаружить ошибки записи, возникшие во время буферизации.
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())
}Быстрая проверка
Что возвращает ReadAll средства чтения CSV для разобранных данных?
Итоги
encoding/csv:
csv.NewReaderвместе сReadилиReadAllcsv.NewWriterвместе сWrite/WriteAll, затемFlush- Задайте
Commaдля пользовательских разделителей; заключение в кавычки выполняется автоматически
Часто задаваемые вопросы
Урок «encoding/csv» бесплатный?
Да — полный текст урока «encoding/csv» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «encoding/csv»?
Читайте и записывайте CSV Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «encoding/csv»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.