首頁 >後端開發 >Golang >golang yaml marshal url

golang yaml marshal url

WBOY
WBOY轉載
2024-02-10 13:33:19568瀏覽

golang yaml marshal url

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 結構上定義了uria 屬性,作為非指標(基於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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除