1.error接口
package main
import (
"fmt"
"errors"
)
func Test(a int, b int) (result int, err error) {
err = nil
if b == 0 {
err = errors.New("除数不能为0")
//当然fmt包中也封装了一个专门输出错误信息的方法,如下所示:
//err = fmt.Errorf("除数不能为0")
} else {
result = a / b
}
return result, err
}
func main() {
result, err := Test(10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
2.panic函数
- error返回的是一般性的错误,但是panic函数返回的是让程序崩溃的错误。
- 在实际的开发过程中并不会直接调用panic( )函数,但是当我们编程的程序遇到致命错误时,系统会自动调用该函数来终止整个程序的运行,也就是系统内置了panic函数。
func main() {
arrs := []int {1,2,3}
fmt.Println(arrs[3])
}
panic: runtime error: index out of range
goroutine 1 [running]:
main.main()
D:/jobs/code/golang/src/Test.go:9 +0x3c
Process finished with exit code 2
func TestA() {
fmt.Println("func TestA")
}
func TestB() {
panic("func TestB:panic")
}
func TestC() {
fmt.Println("func TestC")
}
func main() {
TestA()
TestB()
TestC()
}
3.recover
- 运行时panic异常一旦被引发就会导致程序崩溃。
- Go语言为我们提供了专用于“拦截”运行时panic的内建函数——recover。
- 它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。
- 语法如下:func recover() interface{}
- 注意:recover只有在defer调用的函数中有效。
func TestA() {
fmt.Println("func TestA")
}
func TestB(i int) {
//设置recover
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}() //调用此匿名函数
arrs := []int{1, 2, 3}
arrs[i] = 4 // 当i大于2的时候,当只数组下标越界
fmt.Println("func TestB:", arrs)
}
func TestC() {
fmt.Println("func TestC")
}
func main() {
TestA()
TestB(3)
TestC()
}
func TestA
runtime error: index out of range
func TestC