,15Go错误处理

1.erro(一般错误)

package main

import (
        "errors"
        "fmt"
)

func div(a, b int) (res int) {
        if b == 0 {
                err := errors.New("分母不能为0")
                println(err.Error())

        } else {
                res = a/b
        }
        return
}

func main() {
        res := div(10,0)
        fmt.Println(res)
}

2.panic(宕机)

package main

import (
        "fmt"
)

func div(a, b int) (res int) {
        if b == 0 {
                panic("分母不能为0") // 在这宕机 后面程序不执行了
        } else {
                res = a/b
        }
        return
}

func main() {
        res := div(10,0)
        fmt.Println(res)
}

3.recover(恢复错误)

package main

import (
        "fmt"
)

func div(a, b int) (res int, err error) {
        defer func() { // 发生错误时恢复
                if e := recover(); e != nil {
                        err = fmt.Errorf("err: %v", e)
                }
        }()

        if b == 0 {
                panic("分母不能为0") // 在这宕机 后面程序不执行了
        } else {
                res = a / b
        }
        return
}

func main() {
        res, err := div(10, 0)
        fmt.Println(err.Error())
        fmt.Println(res)
}