Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menghuraikan Fail YAML dengan Kekunci Dinamik dalam Go?

Bagaimana untuk Menghuraikan Fail YAML dengan Kekunci Dinamik dalam Go?

Barbara Streisand
Lepaskan: 2024-11-04 02:38:29
asal
521 orang telah melayarinya

How to Parse YAML Files with Dynamic Keys in Go?

YAML menghurai kod Go dengan kekunci dinamik

Untuk menghuraikan kod Go dengan kekunci dinamik dalam fail YAML, ikut langkah berikut:

1. Pasang pustaka yaml:

<code class="sh">go get gopkg.in/yaml.v2</code>
Salin selepas log masuk

2. Tentukan struktur model:
Buat struktur untuk mewakili data YAML. Jika anda tahu semua kunci yang mungkin anda boleh mentakrifkannya menggunakan medan biasa, jika tidak, anda boleh menggunakan medan peta[rentetan]antara muka{} untuk mengandungi kunci dinamik.

3. Gunakan Unmarshaler tersuai (pilihan):
Jika anda perlu menyesuaikan cara data YAML dihuraikan, anda boleh menggunakan Unmarshaler tersuai. Ini boleh membantu anda mengendalikan kekunci dinamik atau senario penghuraian kompleks lain.

4. Menghuraikan data YAML:
Gunakan fungsi yaml.Unmarshal untuk menghuraikan data YAML dan menyahsirikannya ke dalam struktur model.

Contoh:
Contoh berikut menunjukkan cara menghuraikan fail YAML dengan kekunci dinamik:

<code class="go">package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity+json;
      - application/vnd.company.jk.user+json;
      - application/vnd.company.jk.role+json;
      - application/vnd.company.jk.scope+json;
      - application/vnd.company.jk.test+json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity+json;
      - application/vnd.company.jk.user+json;
      - application/vnd.company.jk.role+json;
      - application/vnd.company.jk.scope+json;
      - application/vnd.company.jk.test+json;

`

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 `yaml:",inline"`
}

func main() {
    e := map[string]Environment{}
    if err := yaml.Unmarshal([]byte(data), &e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}</code>
Salin selepas log masuk

Output:

map[string]main.Environment{
    "development": {
        SkipHeaderValidation: true,
        Versions: {
            "V1": {
                Current:                "1.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},
                SkipVersionValidation:  true,
                SkipMimeTypeValidation: true,
            },
            "V2": {
                Current:                "2.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity+json;", "application/vnd.company.jk.user+json;", "application/vnd.company.jk.role+json;", "application/vnd.company.jk.scope+json;", "application/vnd.company.jk.test+json;"},
                SkipVersionValidation:  false,
                SkipMimeTypeValidation: false,
            },
        },
    },
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menghuraikan Fail YAML dengan Kekunci Dinamik dalam 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan