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
Lepaskan: 2024-11-07 03:13:02
asal
953 orang telah melayarinya

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

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

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!

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