«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как проанализировать файл YAML с вложенными парами ключ-значение в Go?

Как проанализировать файл YAML с вложенными парами ключ-значение в Go?

Опубликовано 16 ноября 2024 г.
Просматривать:677

How to Parse a YAML File with Nested Key-Value Pairs in Go?

Разбор файла YAML в Go

Разбор файлов YAML в Go предполагает использование библиотеки YAML, доступной через gopkg.in/yaml.v2. Предоставленный код предназначен для анализа файла YAML с вложенными парами «ключ-значение», например:

firewall_network_rules:
  rule1:
    src:       blablabla-host
    dst:       blabla-hostname

Однако возникают проблемы при попытке проанализировать пары ключ-значение без сопутствующих значений. Реализованная структура не определяет эти значения, что приводит к ошибке во время анализа.

Чтобы решить эту проблему, рассмотрите возможность включения реального примера YAML, например service.yaml из Google Cloud или Kubernetes:

apiVersion: v1
kind: Service
metadata:
  name: myName
  namespace: default
  labels:
    router.deis.io/routable: "true"
  annotations:
    router.deis.io/domains: ""
spec:
  type: NodePort
  selector:
    app: myName
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443

Этот пример демонстрирует вложенные отношения «ключ-значение» и представляет собой практический вариант использования. Соответствующая структура Go будет выглядеть следующим образом:

type Service struct {
    APIVersion string `yaml:"apiVersion"`
    Kind       string `yaml:"kind"`
    Metadata   struct {
        Name      string `yaml:"name"`
        Namespace string `yaml:"namespace"`
        Labels    struct {
            RouterDeisIoRoutable string `yaml:"router.deis.io/routable"`
        } `yaml:"labels"`
        Annotations struct {
            RouterDeisIoDomains string `yaml:"router.deis.io/domains"`
        } `yaml:"annotations"`
    }
    Spec struct {
        Type     string `yaml:"type"`
        Selector struct {
            App string `yaml:"app"`
        }
        Ports []struct {
            Name       string `yaml:"name"`
            Port       int    `yaml:"port"`
            TargetPort int    `yaml:"targetPort"`
            NodePort   int    `yaml:"nodePort,omitempty"`
        } `yaml:"ports"`
    }
}

Чтобы упростить процесс, такие сервисы, как yaml-to-go и json-to-go, предоставляют удобные инструменты для преобразования структур YAML в структуры Go, что делает задачу синтаксического анализа более управляемой.

Наконец, чтобы демаршалировать файл YAML в вашу структуру, вы можете использовать следующий код:

var service Service

err := yaml.Unmarshal(yourFile, &service)
if err != nil {
    panic(err)
}

Этот подход обеспечивает доступ к проанализированным данным через структуру службы, позволяя вам взаимодействовать с информацией файла YAML в вашем приложении Go.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3