Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencegah Ralat Limpahan Tindanan Apabila Menggunakan json.Unmarshal dalam UnmarshalJSON?
Mengelakkan Limpahan Tindanan apabila Memanggil json.Unmarshal dalam UnmarshalJSON
Memanggil json.Unmarshal(b, type) dalam pelaksanaan UnmarshalJSON tersuai anda boleh membawa kepada ralat limpahan tindanan. Ini berlaku kerana penyahkod JSON berulang kali cuba mencari pelaksanaan UnmarshalJSON tersuai untuk jenis tersebut, menghasilkan gelung tak terhingga.
Penyelesaian: Cipta Jenis Baharu
Untuk mengelakkan isu ini, buat jenis baharu menggunakan kata kunci jenis. Jenis baharu ini tidak akan mewarisi kaedah jenis asal, termasuk UnmarshalJSON.
type person2 Person
Penggunaan:
Tukar nilai jenis asal kepada jenis baharu menggunakan taip penukaran:
if err := json.Unmarshal(data, (*person2)(p)); err != nil { return err }
Contoh:
type Person struct { Name string `json:"name"` Age int `json:"age"` } func (p *Person) UnmarshalJSON(data []byte) error { type person2 Person if err := json.Unmarshal(data, (*person2)(p)); err != nil { return err } // Custom processing if p.Age < 0 { p.Age = 0 } return nil }
Faedah:
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Ralat Limpahan Tindanan Apabila Menggunakan json.Unmarshal dalam UnmarshalJSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!