使用之前请先引入:
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()