Navigation
阅读进度0%
No headings found.

Go 错误处理机制:error 接口、panic 与 recover

December 19, 2024 (1y ago)

Go
Error Handling
Panic Recover

章节概述如下

杜宇错误处理,实际上也比较的简单,语法和使用都比较简单,这里就不分模块去解读了

package main 
import (
	"fmt"
	"errors"
)
func main() {
 
}
 
// 1.概念一栏
// 1.1 go中么有 定义的 错误机制。
// 我们 不推荐使用五花八门的写法,一般都是团队内部统一规范
 
// 1.2 error 类型 实现了 error 接口 
// type error interface {
// 	Error() string
// }
 
// 1.3 可以通过 errors.New 来快速创建错误实例 
// error.New(" n must be in the range [0 ,12]"
 
// 2.实践
func GetFibonacci(n int)([]int,error)  {
	if n <0 || n>100 {
		return nil,errors.New("n shold be in [0,100]")
	}
 
	fibList := []int{1,1}
	for i := 0; i < n; i++ {
		fibList = append(fibList,fibList[i-2]+fibList[i-1])
	}
	return fibList,nil
}
 
func T1(){
	if v,err:= GetFibonacci(-10); err != nil {
		fmt.Println(err)
	}else{
		fmt.Println(v)
	}
}
 
 
// 3 关于程序的另外的退出方法 panic recover Exit
/*
panic 用于不可恢复的错误
paic 退出前会执行defer的内容
 
os.Exit, 不会调用defer,不会输出调用栈
 
recover 类似于 catch  小心哈你的catch 抓了之后 就不见了
 panic之后 会调用defer 在defer中使用revoer就好了
*/
 
func T2()  {
	defer func(){
		if erro := recover(); erro != nil {
			fmt.Println("recoer pacie",erro)
		}
	}()
	fmt.Println("satrt")
	panic(errors.New("errrrrrrr"))
}