Heim  >  Artikel  >  Backend-Entwicklung  >  Los, unmarshalieren auf Großbuchstaben

Los, unmarshalieren auf Großbuchstaben

WBOY
WBOYnach vorne
2024-02-14 09:36:091191Durchsuche

Los, unmarshalieren auf Großbuchstaben

php-Editor Strawberry ist hier, um Ihnen eine praktische Technik vorzustellen: „Los, Unmarshal auf Großbuchstaben umstellen“. Diese Technik kann uns helfen, schneller und effizienter zu programmieren. Wenn wir Code schreiben, müssen wir oft einen Codeabschnitt kommentieren oder auskommentieren, und das manuelle Hinzufügen oder Entfernen von Kommentarsymbolen kann relativ mühsam sein. Mit der Methode „Go, unmarshal to Großbuchstaben“ können wir den Code jedoch schnell kommentieren oder auskommentieren, was unsere Arbeitseffizienz erheblich verbessert. Lassen Sie uns als Nächstes gemeinsam die spezifischen Betriebsmethoden erlernen!

Frageninhalt

Der nachfolgende Schlüssel ist immer kleingeschrieben? Kapitel 923

Ich suche nach der einfachsten Möglichkeit, unstrukturiertes Yaml in Golangcasing-Schlüssel zu entpacken. Details--

Schauen Sie mal vorbei

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

das heißt,

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))
}
  • Die Daten in Zeile 10 werden immer auf die Kleinbuchstaben in m entmarshallt.
  • Um es dann in Großbuchstaben umzuwandeln, muss ich eine Struktur wie Zeile 19 vordefinieren.
  • Die Herausforderung, vor der ich stehe, besteht jedoch darin, dass ich es mit unstrukturierten Yaml zu tun habe, d. h. ich kenne deren Struktur vorher nicht.

In einem Folgekommentar hieß es, sie würden „von gopkg.in/yaml.v3 zu sigs.k8s.io/yaml wechseln“ , aber wenn ich die Dokumentation für sigs.k8s.io/yaml lese, denke ich, dass sie es noch verstehen müssen Die Struktur von Yaml und der Übersetzungsmechanismus müssen im Voraus definiert werden.

Gibt es eine einfache Möglichkeit, unstrukturierte Yaml-Schlüssel in Großbuchstaben/Golangcases umzuwandeln? Was ist der einfachste Weg? Wenn kein Go-Paket diese Funktionalität sofort bereitstellt, gibt es darin Plugins/Rückrufe, mit denen ich die Übersetzung problemlos selbst durchführen kann?

Problemumgehung

Sie können einen benutzerdefinierten Schlüsseltyp deklarieren, der die yaml.unmarshaler-Schnittstelle implementiert.

Dinge wie diese:

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
}

Dann verwenden Sie es als Schlüssel der Karte.

m := make(map[MyKey]any)

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

Das obige ist der detaillierte Inhalt vonLos, unmarshalieren auf Großbuchstaben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen