Go从入门到精通——函数——宕机(panic)——程序终止运行
宕机(panic)——程序终止运行
一、手动触发宕机
Go 语言可以在程序中手动触发宕机,让程序崩溃,这样开发者可以及时地发现错误,同时减少可能的损失。
Go 语言程序在宕机时,会将堆栈和goroutine信息输出到控制台,所以宕机也可以方便地知晓发生错误的位置。
如何触发宕机呢?
1 2 3 4 5 6 | package main func main() { panic( "crash" ) } |
代码输出如下:
1 2 3 4 5 | 发生异常: panic "crash" Stack: 2 0x0000000000d9ef67 in main.main at d:/ go -testfiles/函数-宕机-手动触发宕机. go :4 |
以上代码中只用了一个内建的函数 panic() 就可以造成崩溃,panic() 的声明如下:
1 | func panic(v interface {}) |
panic()参数可以是任意类型,后文将提到的 recover 参数会接收从 panic() 中发出的内容。
二、在运行依赖的必备资源缺失时主动触发宕机
regexp 是 Go 语言的正则表达式包,正则表达式需要编译后才能能使用,而且编译必须是成功的,表示正则表达式可用。
编译正则表达式函数有两种,具体如下:
1 | 1. func Compile(expr string)(*Regexp, error) |
编译正则表达式,发生错误时返回编译错误,Regexp 为 nil,该函数适用于在编译错误时获得编译错误进行处理,同时继续后续执行的环境。
1 | 2. func MustCompile(str string) *Regexp |
当编译正则表达式发生错误时,适用 panic 触发宕机,该函数适用于直接适用正则表达式而无须处理正则表达式错误的情况。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //编译正则表达式函数入口,输入包含正则表达式的字符串,返回正则表达式对象。 func MustCompile(str string) *Regexp { //调用 Compile() 是编译正则表达式的入口函数,该函数返回编译好的正则表达式对象和错误 regexp, error := Compile(str) if error != nil { //判断如果有错误,就使用 panic() 触发宕机 panic(`regexp: Compile(` + quote(str) + `): `error.Error()) } //没有错误时返回正则表达式 return regexp } |
三、在宕机时触发延迟执行语句
当 panic() 触发的宕机发生时,panic() 后面的代码将不会被运行,但是在 panic() 函数前面已经运行过的 defer 语句依然会在宕机发生时发生作用。
1 2 3 4 5 6 7 8 9 10 | package main import "fmt" func main() { defer fmt.Println( "宕机后需要做的事情1" ) defer fmt.Println( "宕机后需要做的事情2" ) panic( "宕机" ) } |
代码输出如下:
1 2 3 4 5 6 7 8 9 10 | Starting: D:\ go -testfiles\bin\dlv.exe dap --check- go -version=false --listen=127.0.0.1:52828 from d:\ go -testfiles DAP server listening at: 127.0.0.1:52828 Type 'dlv help' for list of commands. 宕机后需要做的事情2 宕机后需要做的事情1 panic: 宕机 goroutine 1 [running]: main.main() d:/ go -testfiles/函数-宕机-在宕机时触发延迟执行语句. go :8 +0x159 |
分类:
Go专题精讲
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具