go语言的错误处理机制

1.由内置函数捕获异常,并输出错误信息

该方法需要借助内置函数recover()来捕获错误信息,在程序中需要借助defer来实现,即在某个函数中需要先将判断错误、打印错误信息的方法入栈,待函数执行完毕后再弹栈,若有错误则打印出相关信息,该方法可以使得该函数的后续代码仍正常执行,不会因为函数中的错误而终止后续所有代码的执行。
程序示例如下:

package main
import (
	"fmt"
)
func test() {
	defer func () {
		err := recover()  //捕获错误信息
		if err!= nil {
			fmt.Println("err=",err)  //若有错则打印错误信息
		}
	}()
	num1 := 10
	num2 := 0
	res := num1 / num2   //此处分母不能为0
	fmt.Println(res)
}
func main() {
	test()
	fmt.Println("Main is running!")  //test方法有错,但该语句仍能执行
}

结果如下:

err= runtime error: integer divide by zero
Main is running!

2.通过自定义错误输出错误信息,并退出程序

在go中的errors包有个New()方法,我们可以通过调用该包的New()函数自定义错误信息,函数返回error类型。除此之外,还需通过panic()内置函数打印错误信息并终止程序,而panic函数接收一个接口(interface{})类型的值,即任何值都可以作为参数。
官方文档如下:

func panic
func panic(v interface{})
内建函数panic停止当前Go程的正常执行。当函数F调用panic时,F的正常执行就会立刻停止。F中defer的所有函数先入后出执行后,F返回给其调用者G。G如同F一样行动,层层返回,直到该Go程中所有函数都按相反的顺序停止执行。之后,程序被终止,而错误情况会被报告,包括引发该恐慌的实参值,此终止序列称为恐慌过程。

程序示例如下:

package main
import (
	"fmt"
	"errors"
)
func readConf(name string) error {
	if name == "config.ini"{
		return nil
	}else{
		return errors.New("文件读取错误!")
	}
}
func main() {
	err := readConf("config1.ini")  //此时输入的字符串并不满足要求
	if err != nil {
		panic(err)   //打印错误信息,终止程序,Println函数不会执行
	}
	fmt.Println("文件输入正确!")  
}
发布了113 篇原创文章 · 获赞 51 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38883271/article/details/104578545