Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Pulih daripada Panik dalam Rutin Pergi?

Bagaimanakah Saya Boleh Pulih daripada Panik dalam Rutin Pergi?

DDD
Lepaskan: 2024-11-07 13:51:03
asal
204 orang telah melayarinya

How Can I Recover from Panics in Go Routines?

Memulih daripada Panik dalam Rutin Pergi

Rutin Go menawarkan mekanisme yang berkuasa untuk keselarasan, membolehkan pelaksanaan selari tugas bebas. Walau bagaimanapun, pengendalian panik dalam rutin go boleh menimbulkan cabaran.

Memahami Pulih dalam Rutin Pergi

Fungsi pulih membolehkan pulih daripada panik yang berlaku dalam skop fungsi. Walau bagaimanapun, keberkesanannya terhad kepada goroutine yang sama di mana panik timbul. Percubaan untuk pulih daripada panik dalam goroutine lain akan gagal.

Contoh Kod: Pemulihan Panik Gagal

Berikut ialah coretan kod yang menunjukkan kegagalan untuk pulih daripada panik dalam go routine:

func main() {
    // Note: the following code will panic
    go handle(make(chan int64))

    for {}
}

func handle(done chan int64) {
    var a *int64
    a = nil

    fmt.Println(*a)
    done <- *a
}
Salin selepas log masuk

Kod ini gagal pulih daripada panik dalam goroutine pemegang kerana recover mesti digunakan dalam goroutine yang sama yang memulakan panik.

Contoh Kod: Pemulihan Panik yang Berjaya

Untuk berjaya pulih daripada panik dalam rutin pergi, pernyataan penangguhan pulih mesti ditambah dalam goroutine yang menyusahkan. Berikut ialah versi kod terdahulu yang diubah suai yang berfungsi seperti yang dijangkakan:

func main() {
    done := make(chan int64)

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

        var a *int64
        a = nil

        fmt.Println(*a)
        done <- *a
    }()

    for {}
}
Salin selepas log masuk

Dalam contoh ini, penyataan pemulihan tertunda membolehkan goroutine mengendalikan panik dan mencatat mesej pemulihan dengan anggun.

Mekanisme Asas

Mengikut dokumentasi Go, penamatan panik hanya berlaku apabila semua fungsi tertunda dalam goroutine semasa telah dilaksanakan. Oleh itu, untuk pulih daripada panik dalam rutin pergi, pulih mesti digunakan dalam goroutine yang sama yang memulakan panik, biasanya melalui fungsi tertunda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Pulih daripada Panik dalam Rutin Pergi?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan