Go語言的panic和recover使用

字號+ 編輯: IT男在阿里 修訂: 听风就是我 來源: 利志分享 2023-09-08 我要說兩句(0)

作者曾志海, 業界明星企業技術總監,實力型人物。有充足的PHP大型架搆應用和JAVA、GO語言項目經驗。作者QQ群: 110824698

拿代码直接说明。

package main
import (
    "fmt"
)
func main() {  
    //defer所在函数执行完所有的代码之后,会自动执行defer的这个函数,可以说是析构函数,定义方式:defer function_name()  
    //给一个例子,获取数组元素,处理数组访问越界的问题。
    a := [5]int{1, 2, 3, 4, 5}
    for i := 0; i < 10; i++ {
        item, ok := get(i, a)
        fmt.Println("a[%d]=%d[%v]\n", i, item, ok)
    }
    //recover相当于try-catch的catch部分,使得panic不再传递。而defer相当于try-catch-final的final部分。
    defer func() {
        fmt.Println("a")
        if err := recover(); err == nil {
            fmt.Println("panic info is ", err)
        }
    }()
    fmt.Println("b")
    panic("test function t")
    fmt.Println("c")
}

panic要点:panic相当于一个运行时异常,遇到panic的时候,会停止当前函数剩下来的语句,但在退出该函数之前,会执行defer的语句,依据函数调用层次,panic依次终止每个函数,直至main()。

func get(i int, a [5]int) (ret int, ok bool) {  
    ok = true  
    defer func() {  
        err := recover()  
        if err != nil {  
            fmt.Println(err, "[ set to default value -1 ]")  
            ret = -1  
            ok = false  
        }
    }()  
    ret = a[i]
    return
}
閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評