Rumah >pembangunan bahagian belakang >Golang >Pergi, nyahmarshal ke kunci huruf besar

Pergi, nyahmarshal ke kunci huruf besar

WBOY
WBOYke hadapan
2024-02-14 09:36:091221semak imbas

Pergi, nyahmarshal ke kunci huruf besar

editor php Strawberry di sini untuk memperkenalkan anda kepada teknik praktikal, iaitu "Pergi, unmarshal ke kekunci huruf besar". Teknik ini boleh membantu kami membuat program dengan lebih cepat dan cekap. Apabila kami menulis kod, kami selalunya perlu mengulas atau menyahkomen sekeping kod, dan menambah atau mengalih keluar simbol ulasan secara manual boleh menjadi agak membosankan. Walau bagaimanapun, dengan menggunakan kaedah "Go, unmarshal to uppercase keys", kami boleh mengulas atau menyahkomen kod dengan cepat, yang meningkatkan kecekapan kerja kami dengan ketara. Di bawah, mari kita belajar kaedah operasi khusus bersama-sama!

Kandungan soalan

Kunci seterusnya sentiasa huruf kecil? Bab 923

Saya sedang mencari cara paling mudah untuk membongkar yaml tidak berstruktur ke dalam kunci golangcasing. Butiran--

Sila tengok

https://go.dev/play/p/nihdqorpek1

iaitu,

package main

import (
    "fmt"
    "log"

    "gopkg.in/yaml.v3"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

// Note: struct fields must be public in order for unmarshal to
// correctly populate the data.
type T struct {
    A string
    B struct {
        RenamedC int   `yaml:"c"`
        D        []int `yaml:",flow"`
    }
}

func main() {
    m := make(map[interface{}]interface{})

    err := yaml.Unmarshal([]byte(data), &m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- m:\n%v\n\n", m)

    d, err := yaml.Marshal(&m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- m dump:\n%s\n\n", string(d))
}
  • Data dalam baris 10 sentiasa dipisahkan dengan kekunci huruf kecil dalam m.
  • Untuk menyahmarshal kemudian ke dalam kekunci huruf besar, saya perlu mentakrifkan struktur seperti baris 19.
  • Namun, cabaran yang saya hadapi ialah saya berhadapan dengan yaml yang tidak berstruktur, iaitu saya tidak tahu strukturnya terlebih dahulu.

Ulasan susulan mengatakan mereka "bertukar daripada gopkg.in/yaml.v3 kepada sigs.k8s.io/yaml" , tetapi membaca dokumentasi untuk sigs.k8s.io/yaml, saya rasa mereka masih perlu faham struktur yaml , dan mekanisme terjemahan perlu ditakrifkan terlebih dahulu.

Adakah terdapat cara mudah untuk membongkar kunci yaml tidak berstruktur kepada huruf besar/golangcasing? Apakah cara yang paling mudah? Jika tiada pakej go menyediakan fungsi sedemikian di luar kotak, adakah terdapat sebarang pemalam/panggil balik di dalamnya yang membolehkan saya melakukan terjemahan dengan mudah sendiri?

Penyelesaian

Anda boleh mengisytiharkan jenis kunci tersuai yang melaksanakan antara muka yaml.unmarshaler.

Perkara seperti ini:

type mykey string

func (k *mykey) unmarshalyaml(n *yaml.node) error {
    var s string
    if err := n.decode(&s); err != nil {
        return err
    }
    *k = mykey(strings.toupper(s))
    return nil
}

Kemudian gunakannya sebagai kunci peta.

m := make(map[MyKey]any)

https://www.php.cn/link/e18cfe46b96c30852b565e561152d055

Atas ialah kandungan terperinci Pergi, nyahmarshal ke kunci huruf besar. 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