一、概述

Go语言并没有像Java那样的try catch finally 的处理机制,而是提供了其特有的错误处理机制。在Go语言中,错误或异常分为error和panic两种,error一般是程序员可预知的,会进行合适的处理,例如检测输入是否合法等。而panic是程序员无法预知的异常,例如空指针或数组越界等。

二、error

Go 提供了两种创建error的方法,分别是:
errors.New
fmt.Errorf

package main  import ( 	"errors" 	"fmt" )  func main() { 	res1, err1 := div(1, 1) 	fmt.Println(res1, err1)  	res2, err2 := div(1, 0) 	fmt.Println(res2, err2) 	 	//返回一个error 	e := fmt.Errorf("自定义error") 	fmt.Println(e) }  func div(n, m int) (int, error) { 	if m == 0 { 		return 0, errors.New("0不能作为分母") 	} 	return m / n, nil } 

运行结果如下
Golang错误处理机制(error 与 panic)

三、panic

一般在没有recover的情况下panic会导致程序崩溃,panic,defer和recover经常同时出现,用于异常处理,下面是panic异常处理的示例。

package main  import "fmt"  func main() { 	//注册捕获panic的函数,必须先注册,若在panic之后则无效 	defer doPanic() 	n := 0 	res := 1 / n 	fmt.Println(res) //panic 之后的代码不会执行 }  //当捕获到panic时触发此函数 func doPanic() { 	err := recover() 	if err != nil { 		fmt.Println("捕获到panic") 	} } 

注意在Go语言中,recover只在defer调用的函数中有效,并且defer要在panic之前先注册,否则不能捕获异常。当panic被捕获到后,被注册的函数将获得程序控制权