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
Barbara Streisandasal
2024-12-13 16:06:14774semak imbas

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)
}

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.

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)))
}

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!

Kenyataan:
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