Используя YAML, вы можете писать программы Go, которые взаимодействуют с другими программами, использующими формат данных. Он удобочитаем, поэтому с ним легко работать.
YAML — это популярный удобный для чтения формат сериализации данных. Язык данных подходит для файлов конфигурации, обмена данными и хранения структурированных данных.
Многие проекты на основе Go, в том числе Gqlgen и инструменты сборки, такие как Docker-compose, используют файлы YAML для настройки. Как разработчик Go, вы можете использовать такие инструменты, как пакет yaml, для анализа данных YAML и управления ими.
Понимание файла YAML
Файлы YAML (YAML не является языком разметки) состоят из пар ключ-значение, списков и вложенных структур. Синтаксис YAML разработан так, чтобы быть визуально привлекательным и легко читаемым. Это делает его популярным выбором для файлов конфигурации в Kubernetes и других приложениях. инструменты оркестровки с использованием YAML.
В отличие от других форматов данных, таких как XML и JSON, YAML использует отступы для представления иерархии.
Вот как вы можете определить основные поля с помощью YAML:
имя:ДжонДоу
возраст:30
электронная почта:[email protected]
Двоеточие отделяет ключ от его значения, которое может быть любым допустимым типом данных YAML, включая строки, числа, логические значения или вложенные структуры.
Списки позволяют вам представлять набор значений. Чтобы определить список в YAML, используйте дефис, за которым следует пробел перед каждым элементом:
фрукты:
-яблоко
-банан
-апельсин
Здесь, фрукты является ключом, а строки через дефис определяют список фруктов.
YAML также поддерживает вложенные структуры, что позволяет вам представлять сложные иерархии данных:
человек:
имя:ДжонДоу
возраст:30
адрес:
улица:123ОсновнойСв.
город:Anytown
страна:США
человек key содержит еще один набор пар ключ-значение, образующих вложенную структуру. адрес key имеет собственный набор пар ключ-значение.
Работа с YAML в Go
Go не предоставляет встроенных функций для файлов YAML, но есть сторонние пакеты, которые это делают.
батат упаковка — популярный пакет для работы с файлами YAML. Это обеспечивает:
- Функции парсинга и сериализации.
- Поддержка тегов YAML.
- Полное соответствие спецификации YAML.
- Детальный контроль над маршаллингом и демаршаллингом.
- Обработка ошибок.
- Совместимость с несколькими версиями YAML.
Откройте терминал и выполните эту команду, чтобы установить пакет YAML для вашего проекта:
# установить версию 3 пакета yaml
получить gopkg.in/yaml.v3
После установки пакета вы можете использовать Импортировать оператор для импорта пакета в ваши файлы Go.
Импортировать"gopkg.in/yaml.v3"
Вы можете выбрать несколько версий YAML в зависимости от версии спецификации YAML, которую вы хотите использовать.
Чтение и разбор структур данных YAML to Go
Одной из важных задач, которую вам необходимо выполнить, является синтаксический анализ структур данных YAML to Go. батат package предоставляет простой и удобный API для этого.
Рассмотрим эти данные YAML:
# вывод.yaml
человек:
имя:ДжонДоу
возраст:30
электронная почта:[email protected]
Вы можете определить соответствующую структуру с соответствующими именами полей для анализа данных YAML в структуру данных Go с помощью батат упаковка.
// Структура Person представляет ключ человека в YAML.
тип Человек структура {
Имя нить`yaml:"имя"`
Возраст инт`yaml:"возраст"`
Электронная почта нить`yaml:"электронная почта"`
}
батат Теги структуры помогают сопоставить ключи YAML с полями структуры во время операции синтаксического анализа.
Вот как вы можете преобразовать данные YAML в структуру данных Go:
Импортировать (
"ФМТ"
"gopkg.in/yaml.v3"
"Операционные системы"
)функцияосновной() {
// читаем файл output.yaml
данные, ошибка := os. ЧитатьФайл("выход.yaml")если ошибся != ноль {
паника(ошибка)
}
// создаем структуру человека и десериализуем данные в эту структуру
вар человек человек
если ошибка := ямл. Unmarshal (данные, &человек); ошибся != ноль {
паника(ошибка)
}
// вывод полей в консоль
ФМТ. Распечататьf("Имя: %s\n", человек. Имя)
ФМТ. Распечататьf("Возраст: %d\n", человек. Возраст)
ФМТ. Распечататьf("Электронная почта: %s\n", человек. Электронная почта)
}
основной функция считывает вывод.yaml файл с ioutil пакет Читать файл функция. Затем он создает экземпляр Человек struct и анализирует данные в структуру с помощью Демаршал метод батат упаковка. основной функция выводит поля из экземпляра структуры; вот результат:
Вставка данных в файл YAML
Вы можете использовать структуры данных Go для вставки данных в файлы YAML. Вот как вы можете вставить данные в файл YAML с экземпляром Человек структура:
функцияосновной() {
// Создаем экземпляр структуры Person с демонстрационными данными
человек := человек{
Имя: "Джон Доу",
Возраст: 30,
Электронная почта: "[email protected]",
}// Сериализация структуры человека в формат YAML
данные, ошибка := yaml. Маршал(&человек)если ошибся != ноль {
паника(ошибка)
}// Записываем сериализованные данные YAML в файл с именем "output.yaml"
ошибка = ос. ЗаписатьФайл("выход.yaml", данные, 0644)если ошибся != ноль {
паника(ошибка)
}
ФМТ. Распечатать("Данные записываются в output.yaml")
}
человек переменная является экземпляром Человек тип структуры. Использовать Маршал метод батат package для преобразования структуры в YAML. Он принимает экземпляр структуры и возвращает представление YAML и ошибку.
Вы можете использовать Записать файл функция Операционные системы package для записи данных YAML в ваш файл (в данном случае вывод.yaml).
После успешной сериализации данных YAML и операции записи основной Функция выводит сообщение на консоль.
Вы можете маршалировать и демаршалировать YAML в карты так же, как и со структурами.
Вот пример маршалинга и демаршалинга данных YAML с картами:
упаковка основной
Импортировать (
"ФМТ"
"gopkg.in/yaml.v3"
)функцияосновной() {
// Данные для маршалинга
данные := карта[нить]интерфейс{}{
"имя": "Джон Доу",
"возраст": 30,
"электронная почта": "[email protected]",
}// маршалинг данных в YAML
yamlData, ошибка := yaml. Маршал (данные)если ошибся != ноль {
ФМТ. Распечатать("Ошибка при маршалинге:", ошибся)
возвращаться
}ФМТ. Распечатать("Упорядоченные данные YAML:")
ФМТ. Распечатать(нить(ямлдата))// Преобразование данных YAML в карту
вар неупорядоченные данные карта[нить]интерфейс{}
ошибка = ямл. Unmarshal (yamlData, & unmarshalledData)если ошибся != ноль {
ФМТ. Распечатать("Ошибка во время распаковки:", ошибся)
возвращаться
}
ФМТ. Распечатать("\nНесортированные данные:")
ФМТ. Println (неупорядоченные данные)
}
Процесс такой же, как и для типы структур, за исключением того, что вы используете карты для представления данных. Демаршал и Маршал методы работают для обоих типов данных.
Docker Compose использует файлы YAML для настройки
Работа с файлами YAML в Go обеспечивает мощный и гибкий подход к управлению данными конфигурации.
Одним из известных вариантов использования файлов YAML является Docker Compose, где файл YAML служит конфигурацией для определения и управления многоконтейнерными приложениями Docker.
Docker Compose использует простоту и удобочитаемость YAML для определения служб, сетей, томов и других компонентов контейнерных приложений, чтобы упростить оркестрацию контейнеров.