"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como analisar um arquivo YAML com pares de valores-chave aninhados no Go?

Como analisar um arquivo YAML com pares de valores-chave aninhados no Go?

Publicado em 2024-11-16
Navegar:589

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

Analisando um arquivo YAML em Go

A análise de arquivos YAML em Go envolve a utilização da biblioteca YAML disponível em gopkg.in/yaml.v2. O código fornecido foi projetado para analisar um arquivo YAML com pares de valores-chave aninhados, como o seguinte:

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

No entanto, surgem problemas ao tentar analisar pares de valores-chave sem valores acompanhantes. A estrutura implementada não define esses valores, levando a um erro durante a análise.

Para resolver esse problema, considere incorporar um exemplo YAML do mundo real, como service.yaml do Google Cloud ou 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 exemplo demonstra relações de valor-chave aninhadas e fornece um caso de uso prático. A estrutura Go correspondente seria semelhante 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 o processo, serviços como yaml-to-go e json-to-go fornecem ferramentas convenientes para converter estruturas YAML em Go, tornando a tarefa de análise mais gerenciável.

Finalmente, para desempacotar o arquivo YAML em sua estrutura, você pode usar o seguinte código:

var service Service

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

Essa abordagem permite o acesso aos dados analisados ​​por meio da estrutura de serviço, permitindo que você interaja com as informações do arquivo YAML em seu aplicativo Go.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3