Heim >Backend-Entwicklung >Golang >Golang Yaml Marshal-URL

Golang Yaml Marshal-URL

WBOY
WBOYnach vorne
2024-02-10 13:33:19569Durchsuche

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
}

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"`
}

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
}

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!

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