Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Panik dalam Rutin Pergi Berasingan?

Bagaimana Mengendalikan Panik dalam Rutin Pergi Berasingan?

DDD
Lepaskan: 2024-11-07 20:36:02
asal
457 orang telah melayarinya

How to Handle Panics in Separate Go Routines?

Mengendalikan Panik dalam Rutin Pergi

Apabila panik berlaku dalam rutin Go, adalah penting untuk mengendalikannya dengan betul. Menggunakan fungsi pulih boleh mendapatkan semula nilai panik dengan berkesan dan mengendalikannya dengan sewajarnya.

Satu pendekatan biasa ialah mengendalikan panik dalam fungsi utama menggunakan fungsi tertunda. Walau bagaimanapun, apabila panik berlaku dalam goroutine yang berasingan, pendekatan ini gagal menangkapnya.

Dalam contoh yang diberikan:

func main() {
    done := make(chan int64)
    defer fmt.Println("Graceful End of program")
    defer func() {
        r := recover()
        if _, ok := r.(error); ok {
            fmt.Println("Recovered")
        }
    }()

    go handle(done)
    for {
        select {
        case <-done:
            return
        }
    }
}

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

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

Panik berlaku dalam fungsi pemegang dalam goroutine, tetapi fungsi pulih tertunda dalam fungsi utama tidak boleh menangkapnya. Ini kerana recover hanya berfungsi apabila digunakan dalam goroutine yang sama tempat panik itu berasal.

Untuk menyelesaikan isu ini, alihkan panggilan fungsi pulih tertunda dalam fungsi pemegang:

func main() {
    done := make(chan int64)
    defer fmt.Println("Graceful End of program")

    go handle(done)
    for {
        select {
        case <-done:
            return
        }
    }
}

func handle(done chan int64) {
    defer func() {
        r := recover()
        if _, ok := r.(error); ok {
            fmt.Println("Recovered")
        }
    }()

    var a *int64
    a = nil

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

Dengan ini pengubahsuaian, apabila panik timbul dalam fungsi pemegang, fungsi pemulihan tertunda dalam goroutine yang sama akan menangkap dan memprosesnya dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Panik dalam Rutin Pergi Berasingan?. 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