go http 处理w.write 错误_go学习笔记-错误处理

9cadb527f564011af031b54795adeab6.png

go语言对异常的处理没有使用其他编程语言中常见的 try---catch来处理。go语言追求简洁优雅。在go语言,没有传统的异常概念,go使用panic和recover机制对程序的严重异常进行处理(例如整数除)

在一般业务代码里面,go官方推荐通过error状态返回错误

// 按惯例 将err 总是放到最后一个参数返回
func doSomething(v interface{}) (n int, err error) {
    // 这里是函数业务逻辑
    return
}

// 处理时这样处理
num,err := doSomething()
if err != nil{
    //执行相关错误处理
}

//正常处理流程

panic 与 recover 类似php与java中的try/catch。并且panic与recover都是go 语言中的函数而非语句。panic中断当前函数流程,执行延迟调用(defer),在延迟调用中 ,通过recover捕获panic提交的错误对象

func panic(v interface{})
func recover() interface{}
func main() {
    num := test()
    fmt.Println(num)  // 此时num为0
}


func test() int {
    // 必须要先声明defer,否则不能捕获到panic异常,也就是说要先注册函数,后面有异常了,才可以调用
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("终于捕获到了panic产生的异常:", err) // 这里的err其实就是panic传入的内容
        }
    }()

    panic("fanic 发生了")
    fmt.Println("panic发生后")

    return 10
}
  • 补充:延迟调用语句defer与异常没有直接关系,如果没有发生panic仍然会执行导defer。上面例子只是 使用defer进行revover
  • defer必须在panic之前声明,否则当panic时,recover无法捕获到panic
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值