0.7.异常处理(2018.02.16)

使用之前请先引入:
import (
     "fmt"
     "errors"
)

1.error:
使用错误的两种方法:
var err1 error =  errors.New(" a normal err1 ")     //常用

var err2 error =  fmt.Errorf(" %s ", " a normal err2 ")
案例:
package main

import (
     "errors"
    "fmt"
)

func main() {
    var err1 error =  errors.New(" a normal err1 ")
    fmt.Println(err1)       //a normal err1

    var err2 error =  fmt.Errorf(" %s ", " a normal err2 ")
    fmt.Println(err2)      //a normal err2
}



2.panic:
我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。即:错误用error,中断程序用panic。
package main

import (
    "fmt"
)

func TestA() {
    fmt.Println("func TestA()")
}

func TestB(a, b int) int {
    if b == 0 {
         panic(" divide by zero: panic ")
    }
    return a / b
}

func TestC() {
    fmt.Println("func TestC()")
}

func main() {
    TestA()
    TestB(1, 0)     //TestB()发生异常,中断程序
    TestC()
}
结果如下:




3.recover:
运行时panic异常一旦被引发就会导致程序崩溃。如果想当前的程序从运行时panic的状态中恢复并重新获得流程控制权,可以使用recover函数。 注意:recover只有在defer调用的函数中有效。
package main

import (
    "fmt"
)

func TestA() {
    fmt.Println("func TestA()")
}

func TestB() (err error) {
     defer func() {  //在发生异常时,设置恢复
        if x := recover(); x != nil {
             err = fmt.Errorf("internal error: %v", x)
        }
    }()

     panic(" func TestB(): panic" )
}

func TestC() {
    fmt.Println("func TestC()")
}

func main() {
    TestA()
    err := TestB()
    fmt.Println(err)
    TestC()
}
运行结果:
func TestA()
internal error: func TestB(): panic
func TestC()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值