Golang的error和panic

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

博客主页🏆看看是李XX还是李歘歘 🏆

🌺每天不定期分享一些包括但不限于计算机基础、算法、后端开发相关的知识点以及职场小菜鸡的生活。🌺

💗点关注不迷路总有一些📖知识点📖是你想要的💗 

目录

Error

Panic


 Golang有两种错误处理机制分别是error和panic。

error一般是程序员可预知的在意料之中的错误会进行合适的处理如打开件失败、检测输入是否合法等。而panic是不应该出现问题的地方出现了问题程序员无法预知的异常例如空指针或数组越界等。

Error

Eoor是通过返回值的形式来出来要么忽略错误要么处理错误一般我们会在发生错误时种植程序返回error给调用者并且记录错误日志对于golang这种设计方式我们会在代码中写大量的if判断以便做出决定。

func main() {
	conent,err:=ioutil.ReadFile("filepath")
	if err !=nil{
		//错误处理
        //记录error信息
	}else {
		fmt.Println(string(conent))
	}
}

对于err如果是nil就代表没有错误如果不是nil就代表程序出问题了需要对错误进行处理了。

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

func main() {
    fmt.Println(errors.New("错误"))
    fmt.Println(fmt.Errorf("错误"))
}

Panic

Panic是程序员无法预知的如果没有提前设置解决方案一旦出现将直接导致程序崩溃。Go的类型系统会在编译时捕获很多错误但有些错误如数组访问越界、空指针引用等只能在运行时检查。这些运行时错误会引起painc异常。

在Golang中panic、defer和recover经常同时出现用于异常处理类似在Java中的try catch finally 处理机制。

recover 是一个 Go 语言的内建函数可以让进入宕机流程中的 goroutine 恢复过来。recover只在defer调用的函数中有效并且defer要在panic之前先注册否则不能捕获异常。当panic被捕获到后被注册的函数将获得程序控制权。

func dopanic()  {
	err := recover()
	if err!=nil {
		fmt.Println("panic")
	}
}

func main() {
	defer dopanic()
	n := 0
	res := 1 / n
	fmt.Println(res)
}

其他

当panic异常发生时程序会中断运行并立即执行在该goroutine可以先理解成线程中被延迟的函数defer 机制 panic() 后面的代码将不会被运行这也是为什么defer要在panic之前先注册的原因。

 

参考

(43条消息) 详谈GoLang的panic和error_golang panic_渣渣帅的博客-CSDN博客

(43条消息) Golang错误处理机制error 与 panic_Marvellous丶的博客-CSDN博客_panic和error的区别 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go