PHPer的Go之路 --异常处理

臭大佬 2020-07-20 09:54:47 1082
Go 
简介 异常处理

panic

php 使用 try...catch 对异常进行捕获和处理,在 go 中 使用 panic 抛出。

package main

import "fmt"

func main() {
    defer func() {
        fmt.Println("defer会执行")
    }()

    a := 0
    if (a == 0) {
        panic("除数是0")
    }
    c := 100 / a
    fmt.Printf("上面出现异常,不会执行到这里")
    fmt.Printf("%d", c)
}

recover

php中对异常的捕获和处理,避免程序崩溃,使用的是try...catch...finally,在go中,对应的实现方式是:通过 recover() 函数对 panic 进行捕获和处理,panic 的捕获和其他代码的恢复执行需要放到 defer 语句中完成。

package main

import "fmt"

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Printf("程序执行报错了: %v\n", err)
        }
    }()
    a := 0
    if (a == 0) {
        panic("除数是0")
    }
    c := 100 / a
    fmt.Printf("上面出现异常,不会执行到这里")
    fmt.Printf("%d", c)
}