Bagaimana untuk Menghuraikan Kunci Dinamik dalam YAML dengan Go?

DDD
Lepaskan: 2024-11-04 03:26:30
asal
415 orang telah melayarinya

How to Parse Dynamic Keys in YAML with Go?

Penghuraian Kunci Dinamik dalam YAML dengan Go

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.

Ringkasan Isu

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.

Pendekatan Unmarshaler Tersuai

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(&amp;params); err != nil {
        return err
    }
    var versions map[string]MajorVersion
    if err := unmarshal(&amp;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), &amp;e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}</code>
Salin selepas log masuk

Dengan mentakrifkan Unmarshaler tersuai untuk struct Alam Sekitar, anda boleh mengendalikan kedua-dua struktur boolean dan bersarang dalam fail YAML anda dengan berkesan.

Kesimpulan

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!