Използвайки YAML, можете да пишете Go програми, които взаимодействат с други, използвайки формата на данните. Четим е от хора, толкова лесен за работа.

YAML е популярен четим от човека формат за сериализиране на данни. Езикът на данните е подходящ за конфигурационни файлове, обмен на данни и съхранение на структурирани данни.

Много проекти, базирани на Go, включително Gqlgen и инструменти за изграждане като Docker-compose, използват YAML файлове за конфигуриране. Като разработчик на Go можете да използвате инструменти като пакета yaml, за да анализирате и манипулирате YAML данни.

Разбиране на YAML файл

YAML (YAML не е език за маркиране) файловете се състоят от двойки ключ-стойност, списъци и вложени структури. Синтаксисът на YAML е проектиран да бъде визуално привлекателен и лесен за четене. Това го прави популярен избор за конфигурационни файлове, с Kubernetes и други инструменти за оркестрация, използващи YAML.

За разлика от други формати на данни като XML и JSON, YAML разчита на отстъп за представяне на йерархия.

instagram viewer

Ето как можете да дефинирате основни полета с YAML:

име:ДжонСърна
възраст:30
електронна поща:[email protected]

Двоеточие разделя ключа от неговата стойност, която може да бъде всеки валиден YAML тип данни, включително низове, числа, булеви стойности или вложени структури.

Списъците ви позволяват да представите колекция от стойности. За да дефинирате списък в YAML, използвайте тире, последвано от интервал преди всеки елемент:

плодове:
-ябълка
-банан
-оранжево

Тук, плодове е ключът, а линиите с тире дефинират списък с плодове.

YAML също поддържа вложени структури, което ви позволява да представяте сложни йерархии от данни:

лице:
име:ДжонСърна
възраст:30
адрес:
улица:123ОсновенСв
град:Всеки град
държава:САЩ

The човек key съдържа друг набор от двойки ключ-стойност, образувайки вложена структура. The адрес key има свой собствен набор от двойки ключ-стойност.

Работа с YAML в Go

Go не предоставя вградена функционалност за YAML файлове, но има пакети на трети страни, които го правят.

The ямл пакет е популярен пакет за работа с YAML файлове. Осигурява:

  • Функции за анализиране и сериализиране.
  • Поддръжка на YAML тагове.
  • Цялостно съответствие със спецификацията на YAML.
  • Фино зърнест контрол върху маршалинга и демаршалинга.
  • Обработка на грешки.
  • Съвместимост с множество версии на YAML.

Отворете своя терминал и изпълнете тази команда, за да инсталирате YAML пакета за вашия проект:

# инсталирайте версия 3 на пакета yaml
вземете gopkg.in/yaml.v3

След като инсталирате пакета, можете да използвате импортиране израз за импортиране на пакета във вашите Go файлове.

импортиране"gopkg.in/yaml.v3"

Можете да изберете няколко версии на YAML въз основа на версията на спецификацията на YAML, която искате да използвате.

Четене и анализиране на структури от данни YAML to Go

Една важна задача, която ще искате да изпълните, е анализирането на структури от данни YAML to Go. The ямл пакетът предоставя прост, удобен API за извършване на това.

Помислете за тези YAML данни:

# изход.yaml

лице:
име:ДжонСърна
възраст:30
електронна поща:[email protected]

Можете да дефинирате съответна структура със съвпадащи имена на полета, за да анализирате YAML данните в Go структура от данни с ямл пакет.

// Структурата Person представлява ключа за person в YAML.
Тип Лице структура {
Име низ`yaml:"име"`
Възраст вътр`yaml:"възраст"`
електронна поща низ`yaml:"имейл"`
}

The ямл struct таговете помагат за картографирането на YAML ключовете към структурните полета по време на операцията за анализиране.

Ето как можете да анализирате YAML данните в Go структура от данни:

импортиране (
"fmt"
"gopkg.in/yaml.v3"
"операционна система"
)

функосновен() {
// прочете файла output.yaml
данни, грешка := ос. ReadFile("изход.yaml")

ако грешка!= нула {
паника(грешка)
}

// създаване на структура за лице и десериализация на данните в тази структура
вар лице Лице

ако грешка := yaml. Демаршал (данни, &лице); грешка!= нула {
паника(грешка)
}

// отпечатване на полетата в конзолата
fmt. Printf(„Име: %s\n“, човек. Име)
fmt. Printf(„Възраст: %d\n“, човек. възраст)
fmt. Printf(„Имейл: %s\n“, човек. Електронна поща)
}

The основен функция чете изход.yaml файл с ioutil пакет ReadFile функция. След това създава екземпляр на Лице struct и анализира данните в структурата с Unmarshal метод на ямл пакет. The основен функцията отпечатва полетата от екземпляра на структурата; ето резултата:

Вмъкване на данни в YAML файл

Можете да използвате Go структури от данни, за да вмъкнете данни в YAML файлове. Ето как можете да вмъкнете данни в YAML файл с екземпляр на Лице структура:

функосновен() {
// Създайте екземпляр на структурата Person с примерни данни
човек := Лице{
Име: "Джон Доу",
Възраст: 30,
Електронна поща: "[email protected]",
}

// Сериализиране на структурата на лицето във формат YAML
данни, грешка := yaml. Маршал (&лице)

ако грешка!= нула {
паника(грешка)
}

// Записване на сериализираните YAML данни във файл с име "output.yaml"
грешка = ос. WriteFile("изход.yaml", данни, 0644)

ако грешка!= нула {
паника(грешка)
}

fmt. Println(„Данни, записани в output.yaml“)
}

The човек променливата е екземпляр на Лице тип структура. Използвай маршал метод на ямл пакет за преобразуване на структурата в YAML. Той приема екземпляра на структурата и връща YAML представянето и грешка.

Можете да използвате WriteFile функция на операционна система пакет за запис на YAML данните във вашия файл (в този случай, изход.yaml).

След успешно сериализиране на YAML данни и операция за запис, the основен функция отпечатва съобщение на конзолата.

Можете да маршалите и демаршалите YAML в карти, както правите със структури.

Ето пример за маршалинг и демаршалинг на YAML данни с карти:

пакет основен

импортиране (
"fmt"
"gopkg.in/yaml.v3"
)

функосновен() {
// Данни за маршалинг
данни := карта[низ]интерфейс{}{
"име": "Джон Доу",
"възраст": 30,
"електронна поща": "[email protected]",
}

// Маршалинг на данните в YAML
yamlData, грешка := yaml. Маршал (данни)

ако грешка!= нула {
fmt. Println(„Грешка по време на маршалинг:“, грешка)
връщане
}

fmt. Println(„Маршалирани YAML данни:“)
fmt. Println(низ(yamlData))

// Демаршалинг на YAML данните в карта
вар unmarshalledData карта[низ]интерфейс{}
грешка = yaml. Демаршал (yamlData, &unmarshalledData)

ако грешка!= нула {
fmt. Println(„Грешка по време на демаршалинг:“, грешка)
връщане
}

fmt. Println("\nНемаршалирани данни:")
fmt. Println (немаршалирани данни)
}

Процесът е същият като при типове структури, с изключение на това, че използвате карти за представяне на данни. The Unmarshal и маршал методите работят и за двата типа данни.

Docker Compose използва YAML файлове за конфигуриране

Работата с YAML файлове в Go осигурява мощен и гъвкав подход за управление на конфигурационни данни.

Един важен случай на използване на YAML файлове е Docker Compose, където YAML файл служи като конфигурация за дефиниране и управление на многоконтейнерни Docker приложения.

Docker Compose се възползва от простотата и четливостта на YAML, за да дефинира услуги, мрежи, обеми и други компоненти на контейнеризирани приложения, за да направи оркестрацията на контейнерите лесна.