php小編草今天要介紹一個非常實用的技術-golang中的yaml解析和marshal,以及如何處理url。隨著golang在後端開發中的廣泛應用,了解和掌握這些技術將能夠大幅提高我們的開發效率。本文將簡單介紹yaml的基本概念和用法,並透過範例示範如何使用golang進行yaml的解析和marshal操作;同時,我們也將討論如何處理url,包括解析url參數、建構url等。希望透過本文的學習,能夠幫助大家更好地應用這些技巧在實際專案中。
我正在嘗試使用具有 url 欄位的配置文件,並且我想封送和解封此類型。 文件指出我可以執行自訂編組函數。
在這個 golang 遊樂場中,您可以看到自訂 unmarshal 函數運作正常,但自訂 marshal 函數則不然:
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
不知道為什麼 謝謝
問題是您為指標接收器編寫了marshalyaml
方法,因此您可以在指標類型上呼叫此方法,同時您在 configuration
結構上定義了uri
的a
屬性,作為非指標(基於playground)您貼上的連結)。
因此,您必須將 uri
屬性類型變更為 *yamlurl
(而不是 yamlurl
):
type a struct { uri *yamlurl `yaml:"url"` }
或將 marshalyaml
定義為非指標接收器(又稱值接收器),如下所示:
func (j YAMLURL) MarshalYAML() (interface{}, error) { fmt.Println("custome marshal") return j.String(), nil }
以上是golang yaml marshal url的詳細內容。更多資訊請關注PHP中文網其他相關文章!