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

golang yaml marshal url

WBOY
WBOYke hadapan
2024-02-10 13:33:19512semak imbas

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
}

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

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
}

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

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam