Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Fungsi `recover()` Go Mengekalkan Berbilang Goroutine Berjalan Selepas Panik?

Bagaimanakah Fungsi `recover()` Go Mengekalkan Berbilang Goroutine Berjalan Selepas Panik?

Patricia Arquette
Patricia Arquetteasal
2024-11-26 08:24:09809semak imbas

How Can Go's `recover()` Function Keep Multiple Goroutines Running After a Panic?

Memastikan Berbilang Goroutine Berjalan Sekiranya Berlaku Kemalangan

Apabila bekerja dengan berbilang goroutine dalam Go, adalah penting untuk mempertimbangkan senario di mana satu goroutine mungkin ranap atau panik, berpotensi menjejaskan keseluruhan program. Untuk mengelakkan ini, program mesti mengendalikan situasi ini dengan anggun, membenarkan goroutine lain terus berjalan.

Menggunakan Fungsi Pulih

Go menyediakan pemulihan terbina dalam( ) fungsi yang membolehkan pengendalian panik dan pulih daripadanya. Untuk menggunakan fungsi ini, ia mesti dipanggil dalam fungsi tertunda. Dengan cara ini, jika panik berlaku, ia ditangkap dan program menyambung semula pelaksanaannya selepas fungsi tertunda selesai.

Berikut ialah contoh cara recover() boleh digunakan:

func doPanic() {
    fmt.Println("About to panic")
    panic("test")
}

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

    f()
}

func main() {
    go protect(doPanic)

    for {
        time.Sleep(time.Second)
        fmt.Println("Tick")
    }
}

Penjelasan

  • doPanic ialah fungsi yang sengaja panik.
  • protect ialah fungsi pembantu yang membalut fungsi sebagai goroutine, memerangkap sebarang panik menggunakan fungsi tertunda.
  • Secara utama, protect(doPanic) dilancarkan sebagai goroutine untuk menunjukkan panik pemulihan.

Output

Apabila kod ini dilaksanakan, ia akan mengeluarkan:

About to panic
Recovered: test
Tick
Tick
Tick
...

Ini menggambarkan bahawa walaupun doPanic menyebabkan panik, program terus berjalan kerana panggilan recover(), membenarkan goroutine yang lain untuk terus melaksanakan selama-lamanya.

Adalah penting untuk ambil perhatian bahawa walaupun recover() membenarkan program untuk terus berjalan, ia tidak menghalang panik yang mendasari daripada berlaku. Oleh itu, adalah penting untuk mengenal pasti dan menangani punca panik untuk mengelakkannya daripada berulang pada masa hadapan.

Atas ialah kandungan terperinci Bagaimanakah Fungsi `recover()` Go Mengekalkan Berbilang Goroutine Berjalan Selepas Panik?. 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