Bagaimanakah fungsi pemulihan dalam fungsi golang dilaksanakan?

王林
Lepaskan: 2024-06-05 15:15:01
asal
327 orang telah melayarinya

Fungsi pulih dalam bahasa Go dilaksanakan melalui penjadual untuk mengurus rekod panik dalam goroutine, yang digunakan untuk menangkap dan mengendalikan ralat yang tidak dijangka. Ia hanya menangkap panik dalam goroutine semasa dan menggunakan penyataan tangguh untuk melaksanakan fungsi pemulihan sebelum fungsi kembali berfungsi. Fungsi pemulihan menerima nilai panik jenis antara muka{} dan mencetak mesej ralat yang lebih mesra.

Bagaimanakah fungsi pemulihan dalam fungsi golang dilaksanakan?

Cara fungsi pemulihan dalam fungsi Go dilaksanakan

Fungsi recover dalam bahasa Go membolehkan anda pulih daripada panik daripada menjalankan goroutine. Ia sangat berguna dalam menangkap dan mengendalikan ralat yang tidak dijangka. recover 函数允许从正在运行的 goroutine 中恢复 panic。它在捕获和处理意外错误方面非常有用。

实现

recover 的实现基于 Go 语言的调度程序。调度程序负责管理 goroutine 的执行。它维护着一个 panic 记录,其中存储了最新发生的 panic 值。

当 panic 发生时,调度程序将 panic 值保存在 panic 记录中,并终止当前正在执行的 goroutine。然后,它将控制权交给将该 goroutine 标记为 "dead" 的 runtime。

如果其他 goroutine 正在等待该 goroutine 退出,它们将收到一个 Recover 消息。该消息包含 panic 记录中的 panic 值。

实战案例

假设我们有一个可能引发 panic 的函数:

func DivideByZero(x, y int) {
    if y == 0 {
        panic("division by zero")
    }
    fmt.Println(x / y)
}
Salin selepas log masuk

我们可以使用 recover 从 panic 中恢复,并打印一个更友好的错误消息:

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("Error:", err)
        }
    }()

    DivideByZero(10, 0)
}
Salin selepas log masuk

输出:

Error: division by zero
Salin selepas log masuk

注意

  • defer 语句用于在函数返回之前运行恢复函数。
  • 恢复函数是一个匿名函数,它需要一个 interface{}
  • pelaksanaan
🎜pulih adalah berdasarkan penjadual bahasa Go. Penjadual bertanggungjawab untuk menguruskan pelaksanaan goroutine. Ia mengekalkan rekod panik, yang menyimpan nilai panik terkini. 🎜🎜Apabila panik berlaku, penjadual menyimpan nilai panik dalam rekod panik dan menamatkan goroutine yang sedang dilaksanakan. Ia kemudian menyerahkan kawalan kepada masa jalan yang menandakan goroutine sebagai "mati". 🎜🎜Jika goroutine lain sedang menunggu goroutine ini keluar, mereka akan menerima mesej Recover. Mesej mengandungi nilai panik daripada rekod panik. 🎜🎜🎜Kes praktikal🎜🎜🎜Andaikan kita mempunyai fungsi yang boleh menyebabkan panik: 🎜rrreee🎜Kita boleh menggunakan recover untuk pulih daripada panik dan mencetak mesej ralat yang lebih mesra: 🎜rrreee🎜Output :🎜rrreee🎜🎜Nota 🎜🎜
    🎜 tunda pernyataan digunakan untuk menjalankan fungsi pemulihan sebelum fungsi kembali. 🎜🎜Fungsi pemulihan ialah fungsi tanpa nama yang memerlukan parameter jenis antara muka{} untuk menerima nilai panik. 🎜🎜Fungsi pemulihan hanya menangkap panik dalam goroutine semasa. Ia tidak dapat menangkap panik dalam goroutine lain. 🎜🎜

Atas ialah kandungan terperinci Bagaimanakah fungsi pemulihan dalam fungsi golang dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!