Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Saya Boleh Menghuraikan YAML dengan Kekunci Dinamik dalam Golang?
Apabila bekerja dengan fail YAML yang mengandungi kunci yang ditakrifkan secara dinamik, sistem jenis Go boleh memberikan cabaran. Artikel ini meneroka cara menghuraikan YAML sedemikian dengan berkesan sambil mengekalkan struktur jenis yang diingini.
Kami menemui contoh di mana fail YAML mengandungi kunci pembolehubah (cth., "V1", "V2", dll.). Pendekatan awal untuk menghuraikan ini sebagai jenis Persekitaran menjadi goyah, membawa kami mencari penyelesaian tersuai.
Penyelesaian terletak pada melaksanakan kaedah UnmarshalYAML tersuai untuk jenis Persekitaran kami. Kaedah ini membolehkan kami memintas proses unmarshaling dan mengendalikan kekunci dinamik. Kod yang dikemas kini:
<code class="go">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(¶ms); 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 // a MajorVersion if _, ok := err.(*yaml.TypeError); !ok { return err } } e.SkipHeaderValidation = params.SkipHeaderValidation e.Versions = versions return nil }</code>
Dengan mentakrifkan peta[rentetan]MajorVersion untuk sifat Versi, kami mendayakan penghuraian kunci dinamik. Kaedah UnmarshalYAML tersuai mengisi peta ini secara dinamik berdasarkan kandungan YAML.
Kini, apabila kami menyahmarshal YAML, kami memperoleh peta[rentetan]Persekitaran sebagai jenis akar, dengan setiap persekitaran mempunyai peta Versi yang diisi. Ini menangani cabaran menghuraikan dan mewakili kunci yang ditakrifkan secara dinamik dalam YAML.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan YAML dengan Kekunci Dinamik dalam Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!