Saya nak yaml berikut
kind: bar name: baryaml
Unmarshalling dalam sumber struktur
type kind int const ( kind_foo kind = iota kind_bar ) type resource struct { kind kind name string }
Bolehkah seseorang menerangkan mengapa kod di bawah gagal menyimpan jenis yang betul, walaupun ia dibongkar dengan betul?
# 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) }
Terima kasih kepada @jimb kerana mencadangkan penyahrujukan k
Penunjuk:
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 }
Atas ialah kandungan terperinci Bagaimana cara unmarshal menaip alias di dalam struct dari yaml dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!