Go:
Работа с YAML

Как:

Чтобы работать с YAML в Go, сначала вам нужно импортировать библиотеку, поддерживающую разбор и сериализацию YAML, поскольку стандартная библиотека Go не включает прямую поддержку для YAML. Самая популярная библиотека для этой цели - “gopkg.in/yaml.v3”. Вот как начать:

  1. Установка пакета YAML:
go get gopkg.in/yaml.v3
  1. Разбор YAML в структуру Go:

Сначала определите структуру в Go, которая соответствует структуре ваших данных YAML.

package main

import (
  "fmt"
  "gopkg.in/yaml.v3"
  "log"
)

type Config struct {
  Database struct {
    User     string `yaml:"user"`
    Password string `yaml:"password"`
  } `yaml:"database"`
}

func main() {
  var config Config
  data := `
database:
  user: admin
  password: secret
`
  err := yaml.Unmarshal([]byte(data), &config)
  if err != nil {
    log.Fatalf("error: %v", err)
  }
  fmt.Printf("User: %s\nPassword: %s\n", config.Database.User, config.Database.Password)
}

Пример вывода:

User: admin
Password: secret
  1. Сериализация структуры Go в YAML:

Вот как преобразовать структуру Go обратно в YAML.

package main

import (
  "fmt"
  "gopkg.in/yaml.v3"
  "log"
)

func main() {
  config := Config{
    Database: struct {
      User     string `yaml:"user"`
      Password string `yaml:"password"`
    }{
      User:     "admin",
      Password: "supersecret",
    },
  }

  data, err := yaml.Marshal(&config)
  if err != nil {
    log.Fatalf("error: %v", err)
  }
  fmt.Printf("---\n%s\n", string(data))
}

Пример вывода:

---
database:
  user: admin
  password: supersecret

Подробнее:

Использование YAML в разработке программного обеспечения расширилось из-за его формата, удобного для чтения человеком, что делает его идеальным выбором для файлов конфигурации, документации или форматов обмена данными. По сравнению с JSON, его аналогом, YAML предлагает комментарии, скалярные типы и возможности для отображения отношений, обеспечивая более богатый фреймворк сериализации данных. Однако, гибкость и возможности YAML идут в ущерб сложности разбора, что приводит к потенциальным рискам безопасности при неаккуратной обработке (например, выполнение произвольного кода).

Библиотека “gopkg.in/yaml.v3” для Go является надежным решением для обработки YAML, находя баланс между простотой использования и всесторонней поддержкой функций. На текущий момент, хотя есть альтернативы, такие как “go-yaml/yaml” (библиотека за “gopkg.in/yaml.v3”), выбор версии обычно зависит от конкретных требований проекта или личных предпочтений. При работе с огромными наборами данных или приложениями, критичными к производительности, программисты могут рассмотреть более простые форматы, такие как JSON, за их сокращенное время разбора и накладные расходы на память. Тем не менее, для файлов конфигурации или настроек, где важны читаемость и удобство использования для человека, YAML остается сильным конкурентом в экосистеме Go.