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

Bagaimanakah Saya Boleh Pulih daripada Panik dalam Rutin Pergi?

DDD
DDDasal
2024-11-07 13:51:03194semak imbas

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
}

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

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!

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