NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
### 概述 在通常情况下,向程序使用方报告错误状态的方式可以是返回一个额外的error类型值. 但是,当遇到不可恢复的错误状态的时候,如数组访问越界,空指针引用等,这些运行时错误会引起panic异常, 这时,上述错误处理方式显然就不合适了.反过来讲,在一般情况下, 我们不应该通过调用panic函数来报告普 通的错误,而应该只把它作为报告致命错误的一种方式.当某些不应该发生的场景发生时,我们就应该调用panic . 一般而言,当panic异常发生时,程序会中断运行,并立即执行该goroutine(可以先理解成线程,在中被延迟的 函数(defer机制)).随后,程序崩溃并输出日志信息.日志信息包括panic value和函数调用的堆栈跟踪信息. 不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常,panic函数接受任何值作为参数 . ### 实例 ~~~ func test1(){ fmt.Println("111") } func test2(){ panic("this is a panic test") } func test3(){ fmt.Println("333") } func main(){ test1() test2() test3() } ~~~ ~~~ 111 panic: this is a panic test //直接让程序崩掉 goroutine 1 [running]: main.test2() /Users/artisan/go/src/learn/main.go:10 +0x39 main.main() /Users/artisan/go/src/learn/main.go:19 +0x25 ~~~ ### 数组越界自动调用panic ~~~ func test(x int){ var a [10]int a[x] = 200 } func main(){ test(20) } ~~~ ~~~ panic: runtime error: index out of range //系统自动调用封装好的panic goroutine 1 [running]: main.test2(...) /Users/artisan/go/src/learn/main.go:11 main.main() /Users/artisan/go/src/learn/main.go:20 +0x45 ~~~