Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Memastikan Goroutine Saya Berjalan Walaupun Selepas Panik?

Bagaimanakah Saya Boleh Memastikan Goroutine Saya Berjalan Walaupun Selepas Panik?

Mary-Kate Olsen
Lepaskan: 2024-12-01 00:20:13
asal
254 orang telah melayarinya

How Can I Keep My Go Goroutines Running Even After a Panic?

Menjaga Goroutines Berlari Walaupun Ranap

Dalam Go, goroutin berkuasa tetapi boleh terdedah kepada ranap akibat ralat atau panik. Untuk memastikan kegagalan satu goroutine tidak memberi kesan kepada orang lain, pembangun mungkin tertanya-tanya sama ada terdapat cara untuk memastikan goroutine yang tidak terjejas berjalan.

Untuk pulih daripada panik, fungsi recover() terbina dalam digunakan. Ia membolehkan anda menangkap panik dalam fungsi tertunda. Fungsi pembantu berikut, protect(), menggunakan mekanisme ini untuk melancarkan goroutine dengan pemulihan panik:

func protect(f func()) {
    defer func() {
        if err := recover(); err != nil {
            log.Printf("Recovered: %v", err)
        }
    }()

    f()
}
Salin selepas log masuk

Untuk menggunakan perlindungan ini, hanya berikan fungsi anda sebagai hujah untuk protect(). Dengan membungkus panggilan ini dalam gelung for yang terus mencetak "tanda", kami boleh menunjukkan cara goroutine yang dilindungi oleh protect() akan terus berjalan walaupun panik berlaku dalam goroutine lain:

func main() {
    go protect(doPanic)

    for {
        time.Sleep(time.Second)
        fmt.Println("tick")
    }
}
Salin selepas log masuk

Aplikasi ujian ini akan mengeluarkan:

2021/03/04 14:12:31 about to panic
2021/03/04 14:12:31 Recovered: test
tick
tick
tick
...
Salin selepas log masuk

Seperti yang anda lihat, panik dalam fungsi doPanic dipulihkan dan dikendalikan, manakala yang dilindungi goroutine terus berjalan dan mencetak "tanda." Pendekatan ini berkesan mengasingkan goroutine daripada panik, memastikan satu kegagalan tidak merebak dan merosakkan keseluruhan aplikasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Goroutine Saya Berjalan Walaupun Selepas Panik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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