Heim > Artikel > Backend-Entwicklung > Wie entmarshaliere ich einen Typalias innerhalb einer Struktur aus Yaml in Golang?
Ich möchte das folgende Yaml
kind: bar name: baryaml
Unmarshalling in Strukturressourcen
type kind int const ( kind_foo kind = iota kind_bar ) type resource struct { kind kind name string }
Kann jemand erklären, warum der folgende Code nicht den richtigen Typ speichert, obwohl er korrekt entmarshallt wurde?
# 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) }
Danke an @jimb für den Vorschlag zur Dereferenzierung k
Zeiger:
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 }
Das obige ist der detaillierte Inhalt vonWie entmarshaliere ich einen Typalias innerhalb einer Struktur aus Yaml in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!