Go:
Работа с CSV

Как:

Работа с файлами CSV в Go происходит без особых усилий благодаря его стандартной библиотеке encoding/csv. Ниже представлено введение в чтение и запись файлов CSV.

Чтение файла CSV

Чтобы прочитать файл CSV, вы сначала открываете файл с помощью os.Open, затем создаёте новый читатель CSV с csv.NewReader.

package main

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

func main() {
    file, err := os.Open("data.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    reader := csv.NewReader(file)
    records, err := reader.ReadAll()
    if err != nil {
        panic(err)
    }

    for _, record := range records {
        fmt.Println(record)
    }
}

Этот фрагмент кода прочитает все записи из data.csv и напечатает их. Каждая запись - это срез полей.

Запись в файл CSV

Для записи используйте csv.NewWriter и writer.WriteAll или writer.Write для записи нескольких или одной записи CSV соответственно.

package main

import (
    "encoding/csv"
    "os"
)

func main() {
    file, err := os.Create("output.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    records := [][]string{
        {"Name", "Age", "City"},
        {"John Doe", "30", "New York"},
        {"Jane Doe", "27", "Los Angeles"},
    }

    if err := writer.WriteAll(records); err != nil {
        panic(err)
    }
}

Это создаст файл с именем output.csv с предоставленными записями. Всегда помните о необходимости очистки буфера writer’а для того, чтобы все данные были записаны в файл.

Углублённо

Пакет encoding/csv в Go предоставляет надёжную поддержку для чтения и записи файлов CSV, но он разработан с учётом простоты, что означает, что он не обрабатывает более сложные сценарии, такие как автоматическое определение разделителей, работу с кавычками или встроенные переносы строк в полях без ручной обработки.

Исторически, обработка CSV в языках программирования часто была обременительной из-за этих сложностей, но стандартная библиотека Go абстрагирует многие из этих проблем, позволяя разработчикам работать с данными CSV с относительной лёгкостью. Тем не менее, для более сложной манипуляции с CSV могут потребоваться сторонние библиотеки, такие как gocsv, или вручную выполнять синтаксический анализ.

Одним из заметных аспектов пакета csv Go является его поддержка указания пользовательского разделителя (запятой), что позволяет ему беспрепятственно работать с вариантами файлов CSV, такими как значения, разделённые табуляцией (TSV). Однако, при работе с высоко нестандартными или нестандартными файлами CSV, программистам на Go может потребоваться расширить существующие реализации читателя или писателя csv.

Хотя возможности обработки CSV в Go надёжны для общих целей, для приложений, требующих интенсивной манипуляции с данными, таких как наука о данных или сложные задачи преобразования данных, программисты могут искать специализированные пакеты обработки данных или даже другие языки, более подходящие для этих задач, как Python с его библиотекой pandas. Тем не менее, для простых операций чтения и записи CSV, стандартная библиотека Go выделяется своей эффективностью и простотой.