Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menghuraikan YAML dengan Kekunci Dinamik dalam Golang?

Bagaimanakah Saya Boleh Menghuraikan YAML dengan Kekunci Dinamik dalam Golang?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 10:57:02584semak imbas

How Can I Parse YAML with Dynamic Keys in Golang?

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(&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
        // 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn