Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Menyahmarshal Datetime yang Diformat dengan Salah dalam Go?
Menyahmarshalling Datetime Salah Format
Apabila menghadapi JSON dengan medan datetime yang tidak diformatkan dengan betul, adalah penting untuk merangka strategi yang mantap untuk menghuraikan dan menyahmarshal mereka ke dalam struct Go. Format yang salah biasanya melibatkan ketiadaan aksara bertindih ":" dalam zon waktu mengimbangi, yang membawa kepada ralat unmarshalling.
Penyelesaian: Jenis Tersuai dan Kaedah UnmarshalJSON
Kepada menyelesaikan isu ini, jenis tersuai boleh ditakrifkan untuk menyokong kedua-dua format yang betul dan salah:
<code class="go">type MyTime struct { time.Time } func (self *MyTime) UnmarshalJSON(b []byte) (err error) { s := string(b) s = s[1:len(s)-1] t, err := time.Parse(time.RFC3339Nano, s) if err != nil { t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s) } self.Time = t return }</code>
Apabila unmarshalling, kaedah UnmarshalJSON jenis ini digunakan. Ia mula-mula mengalih keluar petikan di sekeliling daripada rentetan JSON. Ia kemudian cuba menghuraikan masa tarikh menggunakan format masa standard.RFC3339Nano. Jika gagal, ia terus mencuba menghuraikan menggunakan format yang salah tanpa aksara bertindih ("2006-01-02T15:04:05.999999999Z0700").
Definisi Struktur
Untuk menggunakan jenis tersuai ini dalam struct Go:
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
Ini memastikan JSON dengan kedua-dua format datetime yang betul dan tidak betul boleh dinyahmarshalkan ke dalam struct Go yang sama.
Kesimpulan
Dengan mentakrifkan jenis medan masa tersuai dengan kaedah UnmarshalJSON yang sesuai, adalah mungkin untuk menghuraikan dan menyahmarshal medan datetime yang diformat dengan tidak betul dengan lancar dalam program Go. Ini membolehkan lebih fleksibiliti dalam mengendalikan data input dan memastikan perwakilan struct Go menggambarkan data dengan tepat, tanpa mengira formatnya.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Datetime yang Diformat dengan Salah dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!