Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah fungsi pemulihan dalam fungsi golang dilaksanakan?

Bagaimanakah fungsi pemulihan dalam fungsi golang dilaksanakan?

王林
王林asal
2024-06-05 15:15:01328semak imbas

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

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

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

    DivideByZero(10, 0)
}

输出:

Error: division by zero

注意

  • 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!

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