Rumah > pembangunan bahagian belakang > Golang > golang yaml marshal url

golang yaml marshal url

WBOY
Lepaskan: 2024-02-10 13:33:19
ke hadapan
558 orang telah melayarinya

golang yaml marshal url

Editor PHP Baicao akan memperkenalkan kepada anda hari ini teknologi yang sangat praktikal - penghuraian yaml dan marshal dalam golang, dan cara memproses URL. Dengan golang digunakan secara meluas dalam pembangunan bahagian belakang, pemahaman dan penguasaan teknologi ini akan meningkatkan kecekapan pembangunan kami. Artikel ini akan memperkenalkan secara ringkas konsep asas dan penggunaan yaml, dan menunjukkan melalui contoh cara menggunakan golang untuk menghuraikan dan marshal yaml pada masa yang sama, kami juga akan membincangkan cara memproses url, termasuk menghuraikan parameter url, membina url, dll; . Saya berharap melalui kajian artikel ini, saya dapat membantu anda menggunakan teknologi ini dengan lebih baik dalam projek sebenar.

Kandungan soalan

Saya cuba menggunakan fail konfigurasi yang mempunyai medan url dan saya mahu marshal dan unmarshal jenis ini. Dokumentasi menyatakan bahawa saya boleh melaksanakan fungsi marshalling tersuai.

Di taman permainan golang ini anda dapat melihat bahawa fungsi unmarshal tersuai berfungsi dengan baik, tetapi fungsi marshal tersuai tidak:

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
}
Salin selepas log masuk

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

Tidak tahu kenapa Terima kasih

Penyelesaian

Masalahnya ialah anda menulis atribut marshalyaml 方法,因此您可以在指针类型上调用此方法,同时您在 configuration 结构上定义了 uria untuk penerima penunjuk, sebagai bukan penunjuk (berdasarkan pautan taman permainan yang anda tampal).

Oleh itu, anda mesti menukar uri 属性类型更改为 *yamlurl (而不是 yamlurl ):

type a struct {
    uri *yamlurl `yaml:"url"`
}
Salin selepas log masuk

Atau takrifkan marshalyaml sebagai penerima bukan penunjuk (aka nilai penerima) seperti ini:

func (j YAMLURL) MarshalYAML() (interface{}, error) {
    fmt.Println("custome marshal")
    return j.String(), nil
}
Salin selepas log masuk

Atas ialah kandungan terperinci golang yaml marshal url. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan