Разбор файла 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