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()






阅读更多
个人分类: GoLang
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭