Rumah >pembangunan bahagian belakang >Golang >yaml menggunakan berbilang kunci pemetaan kompleks sebagai struktur
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!
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 permainanPenyelesaian
Penyelesaian saya terutamanya berdasarkan soalan ini
@larsksIdeanya 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!