前言
在极客上看了蔡超老师的Go语言课程 随手记下来的一些随笔,Go的基础应用及实例,
系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。目录如下
Go语言基础学习 (一) – 变量 常量已经与其他语言的差异
Go语言基础学习 (二) -Go语言中的类型转与Go语言中的数组切片
Go语言基础学习 (三) – Go语言内的 Map声明使用与工厂模式
Go语言基础学习 (四) – Go语言函数简单介绍
Go语言基础学习 (五) – 面向对象编程
Go语言基础学习 (六) – 编写一个好的错误处理
Go语言基础学习 (七) – 包(package)
Go语言基础学习 (八) – 并发编程
1. Go的错误机制与简单实例

-
以Fibonacci数列做一个error提示var NumberTwoError = errors.New("参数不能小于2") var NumberError = errors.New("参数不能大于100") func GetFibonacci(n int) ([]int, error) { if n > 100{ return nil,NumberTwoError } if n < 2 { return nil,NumberTwoError } fibList := []int{1,1} for i :=2; i<n ;i++ { fibList = append(fibList,fibList[i-2]+fibList[i-1]) } return fibList,nil } func TestGetFibonacci(t *testing.T) { // 此处if判断类处理错误信息 if v,error := GetFibonacci(1); error!=nil{ if error == NumberTwoError { t.Log(error) } if error == NumberError{ t.Log(error) } }else { t.Log("运行正常",v) } } 复制代码=== RUN TestGetFibonacci error_test.go:32: 参数不能小于2 --- PASS: TestGetFibonacci (0.00s) 复制代码 -
2.panic 与recoverpanic:用于发送不可恢复的错误,执行defer func内的代码块,并请求退出程序。
recover:用于恢复panic抛出的错误。
os.Exit:用于直接退出程序。

代码实例func TestPanicRecover(t *testing.T) { defer func() { fmt.Println("错误信息:",err) }() fmt.Println("Start") panic(errors.New("Something wrong!")) } 复制代码Start 错误信息: Something wrong! 复制代码与php内的try方法类似,正常执行程序,panic定义错误,再到defer处抛出错误panic与os.Exit对比下的区别1.
os.Exit退出程序时不会先调用defer func代码块。
2.os.Exit退出程序时不会输出当前调用栈信息。那么,如果我们就是想让程序不
crash,有没有办法呢?答案是有的,使用
recover,但是很不推荐这么使用recover。因为并没有解决发生panic的问题,只是把错误移除,这样是很不安全的。 甚至,如果是因为系统资源panic,这样我们的服务就变成了僵尸服务,虽然活着但无法提供服务功能。recover使用方式如下,但一般不推荐使用。func TestPanicRecover(t *testing.T) { defer func() { if err := recover(); err != nil { // 恢复错误 fmt.Println("recover panic", err) } }() fmt.Println("Test panic is Started.") panic(errors.New("Something wrong!")) } 复制代码因此,小心使用
recover!可能会导致1.形成僵尸服务进程,使安全检查
health check失效
2. 因为没有crash,导致提供不确定的服务。
因此,需要谨慎使用recover。




















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)