Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menghalang Gelung Infinite Semasa Mengendalikan Ralat Tersuai dalam Go?

Bagaimanakah Saya Boleh Menghalang Gelung Infinite Semasa Mengendalikan Ralat Tersuai dalam Go?

Barbara Streisand
Lepaskan: 2024-12-13 16:06:14
asal
808 orang telah melayarinya

How Can I Prevent Infinite Loops When Handling Custom Errors in Go?

Pengendalian Ralat Bukan Rekursif: Mencegah Gelung Infiniti

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().

The Infinite Masalah Gelung

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)
}
Salin selepas log masuk

Jika anda kini cuba mencetak ralat, gelung tak terhingga berlaku:

func main() {
    err := MyError{"Error!"}
    fmt.Println(err)
}
Salin selepas log masuk

Ini berlaku kerana fmt.Sprint(e) memanggil e .Error(), yang seterusnya memanggil fmt.Sprint(e) sekali lagi, dan seterusnya.

Memecahkan Rekursi

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)))
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan