Метод csv.Reader.ReadAll

Метод csv.Reader.ReadAll читает все оставшиеся записи из CSV-потока и возвращает их в виде среза типа [][]string. При вызове метода он читает данные до конца файла или до первой встреченной ошибки. Если чтение прошло успешно, метод возвращает все записи и nil в качестве ошибки. В случае возникновения ошибки возвращается частично прочитанные данные и сама ошибка.

Синтаксис

gorecords, err := reader.ReadAll()

Пример

Давайте прочитаем простой CSV-файл с тремя записями:

gopackage main

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

func main() {
  data := `name,age,city
John,30,New York
Jane,25,Boston`
  
  reader := csv.NewReader(strings.NewReader(data))
  records, err := reader.ReadAll()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
    
  fmt.Println(records)
}

Результат выполнения кода:

go[[name age city] [John 30 New York] [Jane 25 Boston]]

Пример

Теперь прочитаем CSV-файл с разделителем-точкой с запятой и с комментариями:

gopackage main

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

func main() {
  data := `id;product;price
# comment line
1;laptop;1200
2;mouse;25`
  
  reader := csv.NewReader(strings.NewReader(data))
  reader.Comma = ';'
  reader.Comment = '#'
  
  records, err := reader.ReadAll()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  
  fmt.Println(records)
}

Результат выполнения кода:

go[[id product price] [1 laptop 1200] [2 mouse 25]]

Пример

Рассмотрим случай, когда в CSV-файле встречается ошибка (неправильное количество полей):

gopackage main

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

func main() {
  data := `name,age,city
John,30,New York
Jane,Boston`
  
  reader := csv.NewReader(strings.NewReader(data))
  reader.FieldsPerRecord = 3
  
  records, err := reader.ReadAll()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  
  fmt.Println(records)
}

Результат выполнения кода:

go"Error: record on line 3: wrong number of fields"

Смотрите также

  • метод csv.Reader.Read,
    который читает одну запись из CSV-файла
  • тип csv.Reader,
    который используется для чтения CSV-данных
  • метод csv.Writer.WriteAll,
    который записывает все записи в CSV-формат
  • функцию csv.NewReader,
    которая создает новый экземпляр для чтения CSV