文章目录
go 语言学习笔记(14)——异常处理
error(不会导致程序崩溃)
创建一个错误(error)
package main
import (
"errors"//导入包
"fmt"
)
func main() {
//创建一个错误
err1 := errors.New("this is normal err1")
fmt.Println(err1)
}
error接口应用
package main
import (
"errors"
"fmt"
)
func div(a, b int) (result int, err error) {
err = nil
if b == 0 {
err = errors.New("分母不能为0")
} else {
result = a / b
}
return
}
func main() {
result, err := div(20, 2)
if err == nil {
fmt.Println(result)
} else {
fmt.Println(err)
}
result, err = div(20, 0)
if err == nil {
fmt.Println(result)
} else {
fmt.Println(err)
}
}
/*
10
分母不能为0
*/
panic(错误导致程序崩溃)
遇到不可恢复的错误状态的时候, (数组越界, 空指针引用……)会引起panic异常
不应通过调用panic函数来报告普通的错误,把他作为报告错误的一种方式。
发生panic异常是, 程序会中断运行,立刻执行goroutine。程序崩溃并输出日志信息。
显示调用panic
正常程序
package main
import (
"fmt"
)
func funch() {
fmt.Println("hhh")
}
func funcx() {
fmt.Println("xxx")
}
func funcw() {
fmt.Println("www")
}
func main() {
funch()
funcx()
funcw()
}
/*
hhh
xxx
www
*/
调用panic函数
package main
import (
"fmt"
)
func funch() {
fmt.Println("hhh")
}
func funcx() {
//调用panic 函数, 导致程序崩溃
panic("this is a panic test")
//fmt.Println("xxx")
}
func funcw() {
fmt.Println("www")
}
func main() {
funch()
funcx()
funcw()
}
/*
hhh
panic: this is a panic test
*/
数组越界
package main
import (
"fmt"
)
func funch() {
fmt.Println("hhh")
}
func funcx(x int) {
var all [10]int
all[x] = 10
}
func funcw() {
fmt.Println("www")
}
func main() {
funch()
funcx(20)
funcw()
}
/*
hhh
panic: runtime error: index out of range [20] with length 10
*/
recover(错误导致程序崩溃,recover恢复程序)
package main
import (
"fmt"
)
func funch() {
fmt.Println("hhh")
}
func funcx(x int) {
//使用匿名函数
defer func() {
if err := recover(); err != nil {//err是recover的报错信息
fmt.Println(err)
}
}() //调用
var all [10]int
all[x] = 10
fmt.Println("xxx")
}
func funcw() {
fmt.Println("www")
}
func main() {
funch()
funcx(20)
funcx(2)
funcw()
}
/*
hhh
runtime error: index out of range [20] with length 10
xxx
www
*/