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.
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
Das Problem besteht darin, dass Sie das Attribut marshalyaml
方法,因此您可以在指针类型上调用此方法,同时您在 configuration
结构上定义了 uri
的 a
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!