在 Go 语言中,panic 和 recover 是用于处理运行时异常的关键字。以下是它们的用法总结和示例:
1 2 3 4 5 6 7 8 9 10 11 12 |
package main import \"fmt\" func main() { defer func() { if r := recover(); r != nil { fmt.Println(\"Recovered from panic:\", r) } }() fmt.Println(\"Start\") panic(\"something bad happened\") // 触发 panic fmt.Println(\"End\") // 不会执行 } |
输出:
Start
Recovered from panic: something bad happened
1 2 3 4 5 6 7 8 9 10 11 12 |
func mayPanic() { panic(\"a problem occurred\") } func main() { defer func() { if r := recover(); r != nil { fmt.Println(\"Recovered. Error:\", r) } }() mayPanic() // 触发 panic fmt.Println(\"After mayPanic()\") // 不会执行 } |
Web 服务器示例:
1 2 3 4 5 6 7 8 |
func handleRequest() { defer func() { if err := recover(); err != nil { log.Println(\"Request failed:\", err) } }() // 处理请求逻辑(可能触发 panic) } |
通过合理使用这两个关键字,可以提升程序的健壮性,避免因未处理异常导致的崩溃。