Формат CSV довольно популярен среди тех, кто работает с табличными приложениями, такими как Google Sheets или Microsoft Excel. Как работать с этим форматом в приложениях на языке Go? Сегодня мы разберёмся с этой задачей: загрузим CSV в структуру данных, а затем выгрузим данные в JSON.
В других языках программирования работа с данными, разделёнными запятыми (CSV), бывает очень сложной. Бывает, что для этого даже пишут целые библиотеки. В Go работа с данными в формате CSV возможна «из коробки» благодаря пакету encoding/csv.
Возьмём для примера следующий данные (файл people.csv):
Nic,Raboy,San Francisco,CA
Maria,Raboy,Dublin,CA
Steve,,,
Это просто небольшой список людей. Он может содержать много строк и колонок, но для нашего примера этого достаточно.
А теперь перейдём непосредственно к коду программы:
// main.go
package main
import (
"bufio"
"encoding/csv"
"encoding/json"
"fmt"
"io"
"log"
"os"
)
type Person struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
Address *Address `json:"address,omitempty"`
}
type Address struct {
City string `json:"city"`
State string `json:"state"`
}
func main() {
csvFile, _ := os.Open("people.csv")
reader := csv.NewReader(bufio.NewReader(csvFile))
var people []Person
for {
line, error := reader.Read()
if error == io.EOF {
break
} else if error != nil {
log.Fatal(error)
}
people = append(people, Person{
Firstname: line[0],
Lastname: line[1],
Address: &Address{
City: line[2],
State: line[3],
},
})
}
peopleJson, _ := json.Marshal(people)
fmt.Println(string(peopleJson))
}
Перед запуском приложения убедитесь, что оба файла — код в файле main.go и данные в CSV в файле people.csv — существуют и находятся рядом в любой папке вашего компьютера.
Рассмотрим подробнее структуру:
type Person struct {
Firstname string `json:"firstname"`
Lastname string `json:"lastname"`
Address *Address `json:"address,omitempty"`
}
type Address struct {
City string `json:"city"`
State string `json:"state"`
}
Здесь мы создали поля для каждой колонки файла CSV, а также добавили аннотации для выгрузки в JSON.
Программа работает следующим образом: после открытия файла с данными в цикле проходит каждую строку и загружает её в слайс people типа Person. Колонки в CSV это также слайс, поэтому можно очень легко получить их количество, если нужно.
Источник: «Parse CSV Data Using The Go Programming Language»
Разработчик: java, kotlin, c#, javascript, dart, 1C, python, php.
Пишите: @ighar. Buy me a coffee, please :).