错误处理:
当程序处于错误状态可以用os.Exit(1)来中止运行
自定义错误:
err := errors.New("I am error")
用fmt创建错误(和print一个样,它会创建一个自定义error,字符串就是格式化后的字符串)
fmt.Errorf("math: square root of negative number %g", f)
运行时异常与panic
当发生运行时错误时,Go会触发运行时panic(例如数组下标越界)
panic也可以从代码中初始化
panic(MessageString)
从panic中恢复(Recover)
recover(接受panic并处理)
recover(内建函数)被用于从panic中恢复,让程序从panicking中重新获得控制权。
(panicking,程序执行panic之后的状态)
recover只能再defer修饰的函数中使用,用来取得panic传递过来的错误值。
如果正常执行,recover会返回nil。
func main() {
defer func(){
goodWay := recover()//recover接收了panic,并返回panic 的信息。
fmt.Println(goodWay)
}()
panic("I am Panic" )
}
自定义包中的错误处理(遵守准则):
1>在包内部,panic到recover的范围不允许显示的超出包范围。
2>向包的调用者返回的只能是error而不是panic。