Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahmarshal Datetimes Salah Format dalam Go?
Unmarshal Salah Format Datetime
Apabila menyahmarshall datetimes JSON dalam Go, isu biasa timbul apabila offset zon waktu yang disediakan dalam JSON tidak diformat dengan betul . Format yang dijangkakan, menurut RFC3339, ialah 02:00 dengan titik bertindih, tetapi sesetengah sumber mungkin mengeluarkannya sebagai 0200 tanpa titik bertindih.
Penyelesaian Unmarshaling Tersuai
Kepada mengendalikan percanggahan ini, jenis medan masa tersuai boleh ditakrifkan yang menyokong kedua-dua format:
<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] // Remove the quotes 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>
Penyelesaian ini memanfaatkan kaedah UnmarshalJSON untuk mengalih keluar petikan daripada rentetan JSON terlebih dahulu. Kemudian, ia cuba menghuraikan masa tarikh menggunakan format RFC3339Nano standard. Jika gagal, ia akan kembali untuk menghuraikan format yang diubah suai yang mengalih keluar titik bertindih daripada zon waktu mengimbangi.
Penyatuan Struktur
Untuk menyepadukan jenis ini ke dalam struct, tentukan ia sebagai:
<code class="go">type Test struct { Time MyTime `json:"time"` }</code>
Ini membolehkan JSON dibongkar ke dalam struct Ujian, dengan medan Masa diisi dengan tarikh dan masa yang betul, tidak kira sama ada offset zon waktu dipisahkan dengan titik bertindih atau tidak.
Nota Format Masa
Penggunaan tahun 2006 dalam rentetan format masa ialah artifak sejarah daripada keluaran awal Go. Ia tidak mempunyai kepentingan praktikal dan tidak menjejaskan ketepatan atau pemformatan masa tarikh.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal Datetimes Salah Format dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!