Метод csv.Writer.WriteAll

Метод WriteAll записывает все записи из переданного слайса в CSV-формате. Он принимает один параметр - слайс слайсов строк [][]string, где каждая внутренняя запись представляет собой строку полей. Метод автоматически экранирует поля, содержащие специальные символы (запятые, кавычки, символы новой строки), и добавляет разделители между полями и строками.

Синтаксис

gowriter.WriteAll(records)

Пример

Давайте запишем простой набор записей в CSV-формате:

gopackage main

import (
  "encoding/csv"
  "os"
)

func main() {
  records := [][]string{
    {"name", "age", "city"},
    {"John", "30", "New York"},
    {"Jane", "25", "London"},
  }

  file, _ := os.Create("data.csv")
  defer file.Close()

  writer := csv.NewWriter(file)
  writer.WriteAll(records)
}

В результате будет создан файл data.csv со следующим содержимым:

goname,age,city
John,30,New York
Jane,25,London

Пример

Давайте запишем данные, содержащие специальные символы:

gopackage main

import (
  "encoding/csv"
  "os"
)

func main() {
  records := [][]string{
    {"Name", "Description"},
    {"Item 1", `This "product" is great`},
    {"Item 2", "Line 1\nLine 2"},
  }

  file, _ := os.Create("products.csv")
  defer file.Close()

  writer := csv.NewWriter(file)
  writer.WriteAll(records)
}

Результат выполнения кода (содержимое файла):

goName,Description
Item 1,"This ""product"" is great"
Item 2,"Line 1
Line 2"

Обратите внимание, что поля с запятыми, кавычками или переносами строк автоматически обрамляются в двойные кавычки, а внутренние кавычки экранируются.

Пример

Давайте запишем данные с изменённым разделителем:

gopackage main

import (
  "encoding/csv"
  "os"
)

func main() {
  records := [][]string{
    {"a", "b", "c"},
    {"1", "2", "3"},
    {"4", "5", "6"},
  }

  file, _ := os.Create("data.tsv")
  defer file.Close()

  writer := csv.NewWriter(file)
  writer.Comma = '\t'
  writer.WriteAll(records)
}

Результат выполнения кода (содержимое файла):

goa  b  c
1  2  3
4  5  6

В этом примере мы изменили разделитель полей с запятой на табуляцию, установив свойство Comma в значение '\t'.

Пример

Давайте проверим обработку ошибок при записи:

gopackage main

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

func main() {
  records := [][]string{
    {"a", "b", "c"},
    {"1", "2", "3"},
  }

  file, _ := os.Create("output.csv")
  defer file.Close()

  writer := csv.NewWriter(file)
  err := writer.WriteAll(records)
  if err != nil {
    fmt.Printf("Error: %v\n", err)
  }
}

Если операция записи завершилась успешно, программа не выведет сообщение об ошибке. В противном случае будет выведено описание возникшей проблемы.

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

  • метод csv.Writer.Write,
    который записывает одну запись в CSV-формате
  • метод csv.Writer.Flush,
    который принудительно записывает все буферизированные данные
  • метод csv.Reader.ReadAll,
    который читает все записи из CSV-формата
  • функцию csv.NewWriter,
    которая создаёт новый объект для записи CSV