"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 dinamicamente os campos YAML para um conjunto finito de estruturas em Go?

Como analisar dinamicamente os campos YAML para um conjunto finito de estruturas em Go?

Postado em 2025-03-13
Navegar:994

How to Dynamically Parse YAML Fields into a Finite Set of Structs in Go?

analisando dinamicamente os campos yaml a um conjunto finito de estruturas em go

analisar arquivos YAML é uma tarefa comum em muitos aplicativos. No entanto, às vezes um arquivo YAML pode conter campos que precisam ser representados por diferentes tipos de estruturas. Isso pode levar ao código complexo e aos arquivos YAML desordenados. especificação: Fooval: 4

Kind: "bar" especificação: Barval: 5
kind: "foo"
spec:
  fooVal: 4
kind: "bar"
spec:
  barVal: 5

Uma abordagem é usar uma interface de mapa [string] {} como o tipo para o campo Spec. No entanto, essa abordagem pode levar a complexidade adicional e consumo de memória, especialmente para grandes arquivos YAML. UNARSHAL FUNC (interface {}) Erro } func (n *yamlnode) unarshalyaml (funct (interface {}) error (interface {})) { n.unmarshal = unarshal retornar nil }

type Spec struct {
    Kind string      `yaml:"kind"`
    Spec interface{} `yaml:"spec"`
}

type Foo struct {
    FooVal int `yaml:"fooVal"`
}

type Bar struct {
    BarVal int `yaml:"barVal"`
}

digite spec struct { Kind String `Yaml:" Kind "` Interface da especificação {} `yaml:"-"json:"-"` }

Com essas alterações, a função UNMARSHALYAML para especificações pode analisar e desmontar dinamicamente o campo Spec em um tipo de estrutura específico:

type yamlNode struct {
    unmarshal func(interface{}) error
}

func (n *yamlNode) UnmarshalYAML(unmarshal func(interface{}) error) error {
    n.unmarshal = unmarshal
    return nil
}

Essa abordagem fornece uma solução mais elegante e eficiente para analisar dinamicamente campos YAML em um conjunto finito de estruturas, tornando seu código e arquivos YAML muito mais limpo e mais fácil de gerenciar.

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