Pergi, nyahmarshal ke kunci huruf besar

WBOY
Lepaskan: 2024-02-14 09:36:09
ke hadapan
1192 orang telah melayarinya

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))
}
Salin selepas log masuk
  • 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
}
Salin selepas log masuk

Kemudian gunakannya sebagai kunci peta.

m := make(map[MyKey]any)
Salin selepas log masuk

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!

sumber:stackoverflow.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan