Golang Yaml Marshal-URL

WBOY
Freigeben: 2024-02-10 13:33:19
nach vorne
497 Leute haben es durchsucht

golang yaml marshal url

Der PHP-Editor Baicao stellt Ihnen heute eine sehr praktische Technologie vor: Yaml-Parsing und Marshal in Golang sowie die Verarbeitung von URLs. Da Golang in der Back-End-Entwicklung weit verbreitet ist, wird das Verständnis und die Beherrschung dieser Technologien unsere Entwicklungseffizienz erheblich verbessern. In diesem Artikel werden die grundlegenden Konzepte und die Verwendung von Yaml kurz vorgestellt und anhand von Beispielen demonstriert, wie man Golang zum Parsen und Marshallen von Yaml verwendet. Gleichzeitig besprechen wir auch die Verarbeitung von URLs, einschließlich des Parsens von URL-Parametern, des Erstellens von URLs usw . Ich hoffe, dass ich Ihnen durch das Studium dieses Artikels dabei helfen kann, diese Technologien besser in tatsächlichen Projekten anzuwenden.

Frageninhalt

Ich versuche, eine Konfigurationsdatei zu verwenden, die ein URL-Feld enthält, und ich möchte diesen Typ Marshallen und Unmarshalieren. In der Dokumentation heißt es, dass ich eine benutzerdefinierte Marshalling-Funktion ausführen kann.

Auf diesem Golang-Spielplatz können Sie sehen, dass die benutzerdefinierte Unmarshal-Funktion gut funktioniert, die benutzerdefinierte Marshal-Funktion jedoch nicht:

type YAMLURL struct {
    *url.URL
}

func (j *YAMLURL) UnmarshalYAML(unmarshal func(interface{}) error) error {
    fmt.Println("custom unmarshal function")
    var s string
    err := unmarshal(&s)
    if err != nil {
        return err
    }
    url, err := url.Parse(s)
    j.URL = url
    return err
}

func (j *YAMLURL) MarshalYAML() (interface{}, error) {
    fmt.Println("custome marshal")
    return j.String(), nil
}
Nach dem Login kopieren

https://go.dev/play/p/24jbjehi1q8

Ich weiß nicht warum Danke

Workaround

Das Problem besteht darin, dass Sie das Attribut marshalyaml 方法,因此您可以在指针类型上调用此方法,同时您在 configuration 结构上定义了 uria für den Zeigerempfänger als Nicht-Zeiger geschrieben haben (basierend auf dem Spielplatz-Link, den Sie eingefügt haben).

Deshalb müssen Sie konvertieren uri 属性类型更改为 *yamlurl (而不是 yamlurl ):

type a struct {
    uri *yamlurl `yaml:"url"`
}
Nach dem Login kopieren

Oder definieren Sie marshalyaml als Nicht-Zeiger-Empfänger (auch bekannt als Wertempfänger) wie folgt:

func (j YAMLURL) MarshalYAML() (interface{}, error) {
    fmt.Println("custome marshal")
    return j.String(), nil
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonGolang Yaml Marshal-URL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!