1、go错误处理机制,没有try,catch 处理方式是:defer,panic,recover go抛出一个panic的异常,然后在defer中通过recover捕获这个异常
func test(){ defer func(){ err := recover() if err != nil { fmt.Println("错误是:",err) } }() a := 1 b := 0 c := a/b //c := 1/0 捕获不到 fmt.Println(c) //error: .\main.go:10:10: division by zero }
func main(){ test() //捕捉到错误后,其他代码还能正常显示 fmt.Println("成功捕捉到错误") }
2、go中自定义错误,使用error.NNew 和 panic 内置函数 1、error.New("错误说明"),会返回一个error类型的值,表示一个错误 2、panic()内置函数,接受一个interface{}类型的值(也就是任何值了) 作为参数,可以接受error类型的值,输出错误信息,退出程序
func test2(str string)(err error){ if(str == "123"){ return nil }else{ //自定义错误,调用errors包中的New函数建立 return errors.New("传入的字符串不对") } } func test02(){ err := test2("qwe") //返回的错误不是nil,就用内置函数panic输出错误,然后终止程序,后面的代码不执行 if err != nil{ //字符串错误,就输出错误,终止程序 panic(err) } fmt.Println("后面的代码") }
func main(){ test02() }