"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo analizar un archivo YAML con pares clave-valor anidados en Go?

¿Cómo analizar un archivo YAML con pares clave-valor anidados en Go?

Publicado el 2024-11-16
Navegar:332

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

Analizar un archivo YAML en Go

Analizar archivos YAML en Go implica utilizar la biblioteca YAML disponible a través de gopkg.in/yaml.v2. El código proporcionado está diseñado para analizar un archivo YAML con pares clave-valor anidados, como el siguiente:

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

Sin embargo, surgen problemas al intentar analizar pares clave-valor sin valores que los acompañen. La estructura implementada no define estos valores, lo que genera un error durante el análisis.

Para solucionar este problema, considere incorporar un ejemplo YAML del mundo real, como service.yaml de Google Cloud o 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

Este ejemplo demuestra relaciones clave-valor anidadas y proporciona un caso de uso práctico. La estructura Go correspondiente se parecería a:

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"`
    }
}

Para simplificar el proceso, servicios como yaml-to-go y json-to-go proporcionan herramientas convenientes para convertir YAML en estructuras Go, lo que hace que la tarea de análisis sea más manejable.

Finalmente, Para descomponer el archivo YAML en su estructura, puede usar el siguiente código:

var service Service

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

Este enfoque permite el acceso a los datos analizados a través de la estructura de servicio, lo que le permite interactuar con la información del archivo YAML en su aplicación Go.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3