Menyesuaikan JSON Marshaling untuk Medan Masa dengan Override di Golang
In Go, pengekodan/fungsi Marshal json menyediakan cara yang mudah untuk menukar struktur data ke dalam JSON. Walau bagaimanapun, ia menggunakan reka letak lalai untuk masa. Medan masa. Artikel ini meneroka cara untuk mengatasi reka letak ini untuk menggunakan format tersuai.
Pertimbangkan struct berikut:
<code class="go">type Person struct { age int name string dob time.Time }</code>
Secara lalai, Marshaling struct ini menukar medan dob kepada reka letak RFC3339, yang mungkin tidak selalu diingini.
Untuk mengatasi reka letak lalai, kita boleh menggunakan jenis tersuai yang membenamkan masa.Masa dan melaksanakan MarshalJSON:
<code class="go">type CustomTime struct { time.Time } func (t CustomTime) MarshalJSON() ([]byte, error) { return []byte(`"` + t.Format("my_custom_layout") + `"`), nil }</code>
Sekarang, gantikan masa.Masa dengan CustomTime dalam struct Person:
<code class="go">type Person struct { age int name string dob CustomTime }</code>
Apabila Marshaling struct Person yang diubah suai ini, susun atur tersuai akan digunakan pada medan dob.
Contoh:
<code class="go">package main import ( "encoding/json" "fmt" "time" ) type Person struct { age int name string dob CustomTime } func main() { dob := time.Now() p := Person{25, "John Doe", CustomTime{dob}} jsonBytes, err := json.Marshal(p) if err != nil { fmt.Println(err) return } fmt.Println(string(jsonBytes)) }</code>
Output: {"umur":25,"nama":"John Doe","dob":"2023-03-08T14:41:21 00:00"}
Dalam ini contoh, susun atur tersuai ialah "layout_custom_my" yang tidak terdapat dalam struct Person. Sebaliknya, kami telah menentukannya secara langsung dalam kaedah MarshalJSON CustomTime.
Penyesuaian ini membolehkan anda mengawal reka letak masa. Medan masa apabila menggunakan fungsi Marshal, memberikan fleksibiliti dan kawalan ke atas perwakilan JSON.
Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan JSON Marshaling untuk Medan Masa di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!