@@ -1,58 +0,0 @@ 18.panic | 凤凰涅槃进阶之路

18.panic

Abel sun2023年1月6日约 399 字大约 1 分钟

18.panic

在通常情况下,向程序使用方报告错误状态的方式可以是返回一个额外的error类型值。

但是,当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起painc异常。这时,上述错误处理方式显然就不适合了。反过来讲,在一般情况下,我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时,我们就应该调用panic。

一般而言,当panic异常发生时,程序会中断运行,并立即执行在该goroutine(可以先理解成线程,在中被延迟的函数(defer 机制)。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。

不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。

1、显示调用panic函数

package main

import "fmt"

func testa() {
 fmt.Println("aaaaaa")
}

func testb() {
 //fmt.Println("bbbbb")
 //显式调用panic函数,导致程序中断
 panic("this is a panic test")

}
func testc() {
 fmt.Println("ccccc")
}
func main() {
 testa()
 testb()
 testc()
}

2,数组越界导致panic

package main

import "fmt"

func testa() {
 fmt.Println("aaaaaa")
}

func testb(x int) {
 var a [10]int
 a[x] = 111 //当x为20的时候,会导致数组越界,产生一个panic,导致程序崩溃
}
func testc() {
 fmt.Println("ccccc")
}
func main() {
 testa()
 testb(20)
 testc()
}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.9.1