前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >27.Go异常处理-panic函数

27.Go异常处理-panic函数

作者头像
Devops海洋的渔夫
发布2022-01-17 10:30:14
3870
发布2022-01-17 10:30:14
举报
文章被收录于专栏:Devops专栏

27.Go异常处理-panic函数

前言

上一章节,我们学习了使用 error 接口来处理错误,下面继续来学习 panic 函数。

2 panic函数

error返回的是一般性的错误,但是panic函数返回的是让程序崩溃的错误。

也就是当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起painc异常,在一般情况下,我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。

当某些不应该发生的场景发生时,我们就应该调用panic。

一般而言,当panic异常发生时,程序会中断运行。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。

当然,如果直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。

调用panic函数的基本方式

下面给大家演示一下,直接调用panic函数,是否会导致程序的崩溃。

代码语言:javascript
复制
package main

import "fmt"

func TestA()  {
   fmt.Println("func TestA()")
}

func TestB()  {
   // 调用panic函数: 报崩溃信息
   panic("func TestB(): panic")
}

func TestC()  {
   fmt.Println("func TestC()")
}

func main() {
   TestA()
   TestB() // TestB() 发生异常,中断程序
   TestC()
}

错误信息如下:

image-20210605163051217

所以,我们在实际的开发过程中并不会直接调用panic( )函数,但是当我们编程的程序遇到致命错误时,系统会自动调用该函数来终止整个程序的运行,也就是系统内置了panic函数。

数组下标越界的问题

下面给大家演示一个数组下标越界的问题:

代码语言:javascript
复制
package main

import "fmt"

func TestA() {
   fmt.Println("func TestA()")
}

func TestB(x int) {
   // 调用panic函数: 报崩溃信息
   //panic("func TestB(): panic")

   var a [10]int
   a[x] = 222 // x值为11时,数据越界,导致系统自动调用panic函数
}

func TestC() {
   fmt.Println("func TestC()")
}

func main() {
   TestA()
   TestB(11) // TestB() 发生异常,中断程序
   TestC()
}

错误信息如下:

代码语言:javascript
复制
F:\goProject\go-pratice\09_异常处理>go run 02_panic函数.go
func TestA()
panic: runtime error: index out of range [11] with length 10 # 错误信息,数组越界

goroutine 1 [running]:
main.TestB(...)
        F:/goProject/go-pratice/09_异常处理/02_panic函数.go:14
main.main()
        F:/goProject/go-pratice/09_异常处理/02_panic函数.go:23 +0x8c
exit status 2

通过观察错误信息,发现确实是panic异常,导致了整个程序崩溃。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 27.Go异常处理-panic函数
  • 前言
  • 2 panic函数
    • 调用panic函数的基本方式
      • 数组下标越界的问题
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档