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.
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
Masalahnya ialah anda menulis atribut marshalyaml
方法,因此您可以在指针类型上调用此方法,同时您在 configuration
结构上定义了 uri
的 a
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!