Pemformatan Masa dalam Go XML Unmarshal for time.Time Fields
Menyahmarshall data XML ke dalam struct Go kadangkala menghadapi cabaran apabila menghadapi medan tarikh dengan format bukan lalai. Artikel ini menangani isu menghuraikan tarikh tanpa bergantung pada penukaran rentetan.
Pertimbangkan contoh struct Transaction, yang termasuk medan DateEntered masa jenis.Masa. API yang mengembalikan data XML menggunakan format tarikh "yyyymmdd", yang berbeza daripada format lalai yang digunakan oleh masa.Masa.
Malangnya, time.Time tidak melaksanakan antara muka xml.Unmarshaler, menghalang spesifikasi langsung daripada format tarikh tersuai. Untuk mengatasi had ini, struct tersuai boleh dibuat dengan masa tanpa nama. Medan masa dan pelaksanaan UnmarshalXML tersuai:
type Transaction struct { // ... DateEntered customTime `xml:"enterdate"` // use your own type that satisfies UnmarshalXML // ... } type customTime struct { time.Time } func (c *customTime) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { const shortForm = "20060102" // yyyymmdd date format var v string d.DecodeElement(&v, &start) parse, err := time.Parse(shortForm, v) if err != nil { return err } *c = customTime{parse} return nil }
Dengan melaksanakan UnmarshalXML, jenis CustomTime boleh mengendalikan format tarikh "yyyymmdd" tersuai dan menyimpan nilai yang dihuraikan dalam masa tanpa nama. Medan masa dalam struct Transaksi induk.
Pendekatan ini memastikan tarikh dihuraikan dan disimpan dalam masa yang betul. Format masa tanpa memerlukan penukaran rentetan manual atau bergantung pada penghuraian lalai andaian.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Rentetan Tarikh XML ke dalam Medan Time.Time dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!