Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menghalang Gelung Infinite Semasa Mengendalikan Ralat Tersuai dalam Go?
Dalam Go, situasi luar biasa biasanya dikendalikan menggunakan nilai ralat, yang melaksanakan antara muka ralat. Kaedah Error() antara muka mengembalikan rentetan yang menerangkan ralat.
Walau bagaimanapun, apabila bekerja dengan jenis ralat tersuai, adalah penting untuk mengelakkan pengulangan dalam kaedah Ralat().
Pertimbangkan jenis ralat tersuai di mana kaedah Ralat() memanggil fmt.Sprint(e) untuk menukar ralat nilai kepada rentetan. Pendekatan ini menimbulkan masalah yang berpotensi:
type MyError struct { message string } func (e MyError) Error() string { return fmt.Sprint(e) }
Jika anda kini cuba mencetak ralat, gelung tak terhingga berlaku:
func main() { err := MyError{"Error!"} fmt.Println(err) }
Ini berlaku kerana fmt.Sprint(e) memanggil e .Error(), yang seterusnya memanggil fmt.Sprint(e) sekali lagi, dan seterusnya.
Untuk memecahkan rekursi, tukar e kepada nilai yang tidak mempunyai kaedah Rentetan atau Ralat sebelum menghantarnya ke fmt.Sprint:
func main() { err := MyError{"Error!"} fmt.Println(fmt.Sprint(float64(err))) }
Dalam contoh ini, menukar e kepada float64 mengalih keluar kaedah String dan Ralatnya, menghalang gelung tak terhingga.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Gelung Infinite Semasa Mengendalikan Ralat Tersuai dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!