前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang Panic异常

Golang Panic异常

作者头像
月梦@剑心
发布2023-08-31 10:56:13
2020
发布2023-08-31 10:56:13
举报
文章被收录于专栏:月梦·剑心的技术专栏

Panic简介

数组越界访问、空指针引用运行时错误会引起panic异常。 当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer机制)。随后,程序崩溃并输出日志信息。日志信息包括panic value和函数调用的堆栈跟踪信息。panic value通常是某种错误信息。对于每个goroutine,日志信息中都会有与之相对的,发生panic时的函数调用堆栈跟踪信息。

内置的panic函数

不是所有的panic异常都来自运行时,直接调用内置的panic函数也会引发panic异常;panic函数接受任何值作为参数。当某些不应该发生的场景发生时,我们就应该调用panic。

代码语言:javascript
复制
package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Printf("main开始")
	s := []int{}
	go checkSlice(s)
	time.Sleep(time.Second * 10)
	fmt.Printf("main结束")
}

func checkSlice(s []int) {
	time.Sleep(time.Second * 3)
	i := 0
	for i < 200 {
		fmt.Println(i)
		if i == 50 {
			panic(i)
		}
		i++
	}
	defer func() {
		fmt.Println("checkSlice中的defer被执行")
	}()
}

输出:

代码语言:javascript
复制
...
47
48
49
50
panic: 50

goroutine 6 [running]:
main.checkSlice({0x0?, 0x0?, 0x0?})
        D:/golang/gotest/panic.go:22 +0xd4
created by main.main
        D:/golang/gotest/panic.go:11 +0x6a
exit status 2

注意事项

由于panic会引起程序的崩溃,因此panic一般用于严重错误。 对于大部分漏洞,我们应该使用Go提供的错误机制,而不是panic,尽量避免程序崩溃。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Panic简介
  • 内置的panic函数
  • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档