panic和recover
一.声明
func panic(interface{}) //尽量少用
func recover()interface{}
二.panic
1)error
定义:
接口的定义如下:
type error interface{
Error() string
}
对于大部分函数来说,返回错误基本上都可以定义为:
func FOO(param int)(n int,err error){
... ...
}
一般使用
func main(){
n,err:=FOO(0)
if err!=nil{
//错误处理
}else{
//使用返回值n
}
}
底层使用:
这里暂不做介绍
2)panic(当出现不可修复性错误的情况下使用, 可以中断原有的控制流程)
如判断登录用户是否是root
var user = os.Getenv("USER")
func isRoot(){
if user!="root"{
panic("no value for $USER")
}
}
三.recover(从panic状态恢复回来,但只在defer内直接调用才有效)
func main(){
test()
}
func test(){
defer func(){
fmt.Println(recover())
}()
}
**其余用法,如:defer函数内的嵌套函数间接调用recover,或defer直接调用defer都是返回nil, 无效的
网友评论