Rumah >pembangunan bahagian belakang >Golang >Cara Mengendalikan Panik dalam Rutin Pergi: Memahami Skop Pemulihan?

Cara Mengendalikan Panik dalam Rutin Pergi: Memahami Skop Pemulihan?

Barbara Streisand
Barbara Streisandasal
2024-11-07 03:13:02952semak imbas

How to Handle Panics in Go Routines: Understanding Recover Scope?

Mengendalikan Panik dalam Rutin Pergi

Go menyediakan panic() dan recover() terbina dalam untuk menguruskan ralat yang tidak dijangka dan keadaan maut dalam kod berjalan. Untuk mengendalikan panik dalam rutin pergi, adalah penting untuk memahami skop recover().

Memahami Skop recover()

recover() hanya boleh pulih daripada panik dalam goroutine yang sama yang menimbulkan panik. Jika panik berlaku dalam goroutine tanpa recover() aktif, keseluruhan program akan ranap.

Contoh dengan Pengendalian Ralat yang Tidak Betul

Contoh kod yang disediakan dalam soalan gagal menangani panik kerana recover() ditakrifkan dalam rutin utama, manakala panik dinaikkan dalam handle() goroutine. Akibatnya, recover() tidak boleh mengakses nilai panik.

func main() {
    // ...

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    fmt.Println(*a) // Panic here
    done <- *a      // Dereferencing nil pointer
}

Contoh dengan Pengendalian Ralat Betul

Untuk menangani panik yang ditimbulkan dalam goroutine, letakkan recover () dalam goroutine itu sendiri.

func main() {
    // ...

    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered")
        }
    }()

    go handle(done)
    // ...
}

func handle(done chan int64) {
    // ...
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered")
        }
    }()

    fmt.Println(*a) // Panic here
    done <- *a      // Dereferencing nil pointer
}

Penjelasan

Dalam contoh yang diperbetulkan ini, recover() kini berada dalam handle() goroutine, jadi ia boleh menangkap panik yang ditimbulkan dengan tidak merujuk penuding nol. Panik kemudiannya dipulihkan dan mesej "Dipulihkan" dicetak.

Memahami skop recover() adalah penting untuk pengendalian ralat yang berkesan dalam rutin Go. Sentiasa letakkan recover() dalam goroutine yang sama di mana panik boleh berlaku untuk mengendalikan dan melaporkan sebarang keadaan yang tidak dijangka dengan anggun.

Atas ialah kandungan terperinci Cara Mengendalikan Panik dalam Rutin Pergi: Memahami Skop Pemulihan?. 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