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.
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