Menyesuaikan JSON Marshaling for Time.Time
Dalam Go, fungsi Marshal generik daripada pakej pengekodan/json menyerikan masa. Nilai masa sebagai rentetan menggunakan format ISO 8601 lalai. Walau bagaimanapun, adalah mungkin untuk menyesuaikan gelagat ini dengan mengatasi reka letak yang digunakan untuk marshaling masa.
Pertimbangkan struct berikut:
<code class="go">type MyStruct struct { StartTime time.Time Name string }</code>
Untuk menggunakan reka letak masa tersuai semasa menyusun MyStruct ke JSON, kita boleh membenamkan masa.Taip masa dalam struct tersuai yang mengatasi kaedah MarshalText dan MarshalJSON. Berikut ialah contoh:
<code class="go">import ( "encoding/json" "time" ) type CustomTime struct { time.Time Layout string } func (ct CustomTime) MarshalText() ([]byte, error) { return []byte(ct.Format(ct.Layout)), nil } func (ct CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + ct.Format(ct.Layout) + `"`), nil }</code>
Dalam jenis tersuai ini, kami telah membenamkan masa. Masa dan menambah medan Reka Letak tambahan untuk menentukan rentetan reka letak yang dikehendaki. Dengan mengatasi kaedah MarshalText dan MarshalJSON, kami boleh mengawal pemformatan medan masa.
Untuk menggunakan CustomTime dengan struct anda, ganti medan time.Time dengan medan CustomTime dan mulakan medan Layout dengan reka letak yang dikehendaki rentetan. Contohnya:
<code class="go">type CustomMyStruct struct { StartTime CustomTime Name string } func main() { s := CustomMyStruct{ StartTime: CustomTime{ Time: time.Now(), Layout: "2006-01-02 15:04:05", }, Name: "ali", } data, err := json.Marshal(s) if err != nil { panic(err) } fmt.Println(string(data)) }</code>
Kod ini akan mensirikan tika MyStruct sebagai JSON, menggunakan reka letak masa yang ditentukan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menyesuaikan JSON marshaling untuk `time.Time` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!