Maison > Article > développement back-end > Comment désorganiser l'alias de type à l'intérieur de la structure de yaml dans Golang ?
Je veux le yaml suivant
kind: bar name: baryaml
Démarrage dans la ressource de structure
type kind int const ( kind_foo kind = iota kind_bar ) type resource struct { kind kind name string }
Quelqu'un peut-il expliquer pourquoi le code ci-dessous ne parvient pas à stocker le type correct, même s'il n'est pas correctement trié ?
# output: unmarshaled kind: 1 yamlbar: {0 baryaml}
# expected output: unmarshaled kind: 1 yamlbar: {1 baryaml}
package main import ( "fmt" "gopkg.in/yaml.v3" ) type Kind int const ( KIND_FOO Kind = iota KIND_BAR ) func (k *Kind) UnmarshalYAML(value *yaml.Node) error { var kind string err := value.Decode(&kind) if err != nil { return err } var x Kind switch kind { case "foo": x = KIND_FOO case "bar": x = KIND_BAR default: return fmt.Errorf("unknown kind: %s", kind) } k = &x fmt.Println("Unmarshaled kind:", *k) return nil } type Resource struct { Kind Kind Name string } func main() { var yamlBar = ` kind: bar name: baryaml ` r := Resource{} err := yaml.Unmarshal([]byte(yamlBar), &r) if err != nil { panic(err) } fmt.Println("yamlBar:", r) }
Merci à @jimb d'avoir suggéré le déréférencement k
Pointeur :
func (k *Kind) UnmarshalYAML(value *yaml.Node) error { var kind string err := value.Decode(&kind) if err != nil { return err } switch kind { case "foo": *k = KIND_FOO case "bar": *k = KIND_BAR default: return fmt.Errorf("unknown kind: %s", kind) } fmt.Println("Unmarshaled kind:", *k) return nil }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!