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
Barbara Streisandasal
2024-11-04 02:38:29522semak imbas

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>

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>

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,
            },
        },
    },
}

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!

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