Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型
//error和errors的使用
package main
import (
"errors"
"fmt"
)
func main() {
//调用errorf()方法,返回一个error类型的字符串(error是一个接口类型)
var err1 error = fmt.Errorf("this is a new time")
fmt.Println(err1)
//直接调用errors包的new方法,作用和errorf一样
err2 := errors.New("this is a good new")
fmt.Println(err2)
}
当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起painc异常。这时,上述错误处理方式显然就不适合了。反过来讲,在一般情况下,我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时,我们就应该调用panic。
当panic异常发生时,程序会中断运行,并立即执行在该goroutine(可以先理解成线程,在中被延迟的函数(defer 机制)。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。
不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。
func panic(v interface{})
//panic代码
package main
import "fmt"
func test(a, b int) (res int) {
if b == 0 {
panic("this is a zero")
} else {
res = a / b
return
}
}
func main() {
//可以隐式调用painc,使程序中断
var a []int = []int{1, 2, 3, 4}
result := test(1, 0) //程序会在此处中断,不会往下执行
fmt.Println(result)
for _, value := range a {
fmt.Println(value)
}
}
原文:https://www.cnblogs.com/zhaopp/p/11625837.html