Apabila bekerja dengan fail YAML dalam Go, anda mungkin menghadapi senario di mana nama kunci dalam fail berbeza-beza. Ini sering digunakan untuk versi API atau tujuan konfigurasi dinamik. Untuk menghuraikan struktur YAML sedemikian dengan berkesan, anda perlu menggunakan strategi penghuraian tersuai.
Dalam konteks versi API, ada kemungkinan untuk mempunyai fail YAML dengan kunci yang mewakili versi berbeza , seperti "V1", "V2", "V3", dan sebagainya. Masalahnya ialah versi ini mungkin tidak selalu ada dalam fail dan susunannya mungkin tidak konsisten.
Untuk menyelesaikan isu ini, pertimbangkan untuk melaksanakan Unmarshaler tersuai untuk yang sepadan struktur data. Ini membolehkan anda mengawal proses unmarshalling dan mengendalikan nilai kunci dinamik.
<code class="go">package main import ( "fmt" "gopkg.in/yaml.v2" ) type MajorVersion struct { Current string `yaml:"current"` MimeTypes []string `yaml:"mime_types"` SkipVersionValidation bool `yaml:"skip-version-validation"` SkipMimeTypeValidation bool `yaml:"skip-mime-type-validation"` } type Environment struct { SkipHeaderValidation bool Versions map[string]MajorVersion } func (e *Environment) UnmarshalYAML(unmarshal func(interface{}) error) error { var params struct { SkipHeaderValidation bool `yaml:"skip-header-validation"` } if err := unmarshal(&params); err != nil { return err } var versions map[string]MajorVersion if err := unmarshal(&versions); err != nil { // Here we expect an error because a boolean cannot be converted to a MajorVersion if _, ok := err.(*yaml.TypeError); !ok { return err } } e.SkipHeaderValidation = params.SkipHeaderValidation e.Versions = versions return nil } func main() { var e map[string]Environment if err := yaml.Unmarshal([]byte(data), &e); err != nil { fmt.Println(err.Error()) } fmt.Printf("%#v\n", e) }</code>
Dengan mentakrifkan Unmarshaler tersuai untuk struct Alam Sekitar, anda boleh mengendalikan kedua-dua struktur boolean dan bersarang dalam fail YAML anda dengan berkesan.
Unmarshalers Tersuai menawarkan cara yang berkesan untuk menghuraikan struktur YAML yang kompleks dan dinamik di Golang. Dengan melaksanakan logik unmarshaling tersuai, anda boleh menyesuaikan struktur data anda kepada pelbagai format utama, menjadikannya lebih mudah untuk bekerja dengan fail YAML dalam situasi di mana struktur mungkin berubah dari semasa ke semasa.
Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Kunci Dinamik dalam YAML dengan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!