GO的错误处理
GO语言的错误处理有它自己的特点:
package main
import (
"errors"
"fmt"
)
var LessThanOneError=errors.New("the request num is less than 1 ")\\一般会先声明全局变量固定某一种错误
var OverThanNinetyError=errors.New("the request num is over than 90")
func Fibonacci(n int)([]int,error) {
defer func() {
recover()
fmt.Println(OverThanNinetyError,"<----------please try again!")
}()
if n<1 {
return nil,LessThanOneError
}else if n>90{
panic(OverThanNinetyError)
}
fiblist:=[]int{1,1}
for i:=2;i<n;i++ {
fiblist=append(fiblist,fiblist[i-2]+fiblist[i-1] )
}
return fiblist,nil
}
func printFib(fiblist []int,err error) {
if err != nil {
fmt.Println(err,"<----------please try again!")
} else {
for index, value := range fiblist {
fmt.Println("index:", index, "value", value)
}
}
}
func main() {
println("Please input an integer")
for {
var n int
fmt.Scanf("%d", &n)
result, err := Fibonacci(n)
printFib(result, err)
}
}
以上代码是对GO语言错误处理的一个简单应用,利用panic释放混乱,利用panic不同于os.exit的特性退出调用defer去recover程序,捕捉到panic的原因
recover可以恢复panic这一点值得注意的是:有时候你不能让所有的panic都recover,否则程序就处于一个亚健康的状态了,所以有时候碰到特定的错误,不如直接shutdown再重启。