Go语言并没有像Java那样的try catch finally 的处理机制,而是提供了其特有的错误处理机制。在Go语言中,错误或异常分为error和panic两种,error一般是程序员可预知的,会进行合适的处理,例如检测输入是否合法等。而panic是程序员无法预知的异常,例如空指针或数组越界等。
Go 提供了两种创建error的方法,分别是:errors.Newfmt.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 } 运行结果如下
一般在没有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被捕获到后,被注册的函数将获得程序控制权