16-Goang错误处理-defer/panic/recover

errors

Go 语言通过 error 接口实现错误处理的标准模式,通过使用函数返回值列表中的最后一个值返回错误信息,将错误的处理交由程序员主动进行处理。可以通过 errors 包的 New 方法创建或者通过 fmt.Errorf 方法创建。

package main

import (
    "errors"
    "fmt"
)

// 返回值  怎么定义错误类型
// 怎么创建错误类型的值,errors.New() fmt.Errorf()
// 无错误 nil,
func division(a, b int) (int, error) {
    if b == 0 {
        return -1, errors.New("division by zero")
    }
    return a / b, nil
}

func main() {
    fmt.Println(division(1, 3))
    if v, err := division(1, 0); err == nil {
        fmt.Println(v)
    } else {
        fmt.Println(err)
    }
    e := fmt.Errorf("Error: %s", "division by zero")
    fmt.Printf("%T,%v\n", e, e)
}

defer

defer 关键字用户声明函数,不论函数是否发生错误都在最后执行(return 之前),若使用 defer 声明多个函数,则按照声明的顺序,先声明后执行(堆)。

常用来做资源释放,记录日志等工作

package main

import "fmt"

func main() {
    // defer 延迟执行,最后执行
    // 多个defer,和栈差不多,先进后出
    defer func() {
        fmt.Println("defer01")
    }()

    defer func() {
        fmt.Println("defer02")
    }()

    fmt.Println("main over")
}

go 语言提供 panic 和 recover 函数用于处理运行时错误,当调用 panic 抛出错误,中断原有的控制流程,常用于不可修复性错误。recover 函数用于终止错误处理流程,仅在 defer语句的函数中有效,用于截取错误处理流程,recover 只能捕获到最后一个错误。

go 语言提供 panic 和 recover 函数用于处理运行时错误,当调用 panic 抛出错误,中断原有的控制流程,常用于不可修复性错误。recover 函数用于终止错误处理流程,仅在 defer语句的函数中有效,用于截取错误处理流程,recover 只能捕获到最后一个错误。

panic抛出异常并退出

package main

import "fmt"

func main() {
    fmt.Println("main start")
    panic("errors")
    fmt.Println("main end")
}

recover 对错误进行恢复处理

package main

import (
    "fmt"
)

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()
    fmt.Println("main start")
    panic("errors panic recover")
    fmt.Println("main end")
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容