Rumah >pembangunan bahagian belakang >Golang >yaml menggunakan berbilang kunci pemetaan kompleks sebagai struktur

yaml menggunakan berbilang kunci pemetaan kompleks sebagai struktur

WBOY
WBOYke hadapan
2024-02-09 19:12:09744semak imbas

yaml 将多个复杂的映射键作为一个结构体

Editor PHP Youzi menyebut konsep penting semasa memperkenalkan YAML, iaitu menggunakan berbilang kunci pemetaan kompleks sebagai struktur. YAML ialah format yang digunakan untuk mewakili siri data dan sangat boleh dibaca oleh manusia. Dalam YAML, anda boleh menggunakan struktur untuk menggabungkan berbilang pasangan nilai kunci menjadi satu keseluruhan, menjadikan struktur data lebih jelas dan lebih mudah difahami. Pendekatan ini boleh membantu pembangun mengatur dan mengurus data kompleks dengan lebih baik serta meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Dalam aplikasi praktikal, struktur adalah ciri yang sangat berguna, mari kita lihat!

Kandungan soalan

Saya ingin membongkar kunci peta kompleks ke dalam struktur:

yaml

unf:
    item_meta:
      source:
        ? id: "aa"
          name: "bb"
        : "some value"

Struktur

type source struct {
    id     string `yaml:"id"`
    name   string `yaml:"name"`
}

Semuanya berfungsi seperti yang diharapkan sehingga saya menambah kunci lain:

yaml 2

unf:
    item_meta:
      source:
        ? id: "012"
          name: "bill"
        : "some value"
        ? id: "066"
          name: "bob"
        : "another value"

Saya mendapat ralat

"line xxx: mapping key "" already defined at line xxx"

Saya memutuskan untuk menggunakan alias:

yaml 3

unf:
    item_meta:
      aliases:
        - bill: &alias_bill
          id: "012"
          name: "Bill"
        - bob: &alias_bob
          id: "066"
          name: "Bob"
      source:
        ? *alias_bill
        : "some value"
        ? *alias_bob
          name: "Bob"
        : "another value"

Selesai masalah! Tetapi kami menggunakan hiera server dalam tindanan hiera server 并且 hiera dan hiera mengembalikan kandungan fail konfigurasi yang diganti, jadi saya mendapat versi yaml 2.

p> hiera 服务器 Ada idea bagaimana untuk menyelesaikan masalah ini? Tidak dapat mengkonfigurasi

.

Pergi ke taman permainan

Penyelesaian

Penyelesaian saya terutamanya berdasarkan soalan ini

@larsks

Ideanya adalah untuk mencari nod dengan kekunci peta pendua dan mencipta nilai tersuai daripada nod nilai nod peta. 🎜
func fixYamlNode(node *yaml.Node) {
    if node.Kind == yaml.MappingNode {
        length := len(node.Content)

        for i := 0; i < length; i += 2 {
            nodes := make([]*yaml.Node, 0)
            nodes = append(nodes, node.Content[i])
            for j := i + 2; j < length; j += 2 {
                nj := node.Content[j]
                if nodes[0].Kind == nj.Kind && nodes[0].Value == nj.Value {
                    nodes = append(nodes, nj)
                }
            }
            if len(nodes) == 1 {
                continue
            }

            fillMapValue(nodes)
        }

        for i := 1; i < length; i += 2 {
            valueNode := node.Content[i]
            fixYamlNode(valueNode)
        }
    }
}

func fillMapValue(nodes []*yaml.Node) {
    for _, node := range nodes {
        length := len(node.Content)
        for i := 0; i < length; i += 2 {
            node.Value = fmt.Sprintf("%s %s", node.Value, node.Content[i+1].Value)
        }
    }
}

Atas ialah kandungan terperinci yaml menggunakan berbilang kunci pemetaan kompleks sebagai struktur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam