main之前段错误_七天系列第七弹:错误恢复(Panic Recover)

本文介绍了Gee框架中错误恢复的实现,包括panic、defer和recover的使用。当panic发生时,通过recover可以避免程序终止,并提供错误信息以协助定位问题。文中展示了如何在Gee框架内添加错误处理机制,确保服务在遇到错误时仍能返回响应并记录详细的错误日志。
摘要由CSDN通过智能技术生成

42a722caeb27189466015535bd9b3b1f.png

作者:geektutu

链接:https://geektutu.com/post/gee-day6.html

7. Gee - 错误恢复(Panic Recover)

  • 实现错误处理机制。

panic

Go 语言中,比较常见的错误处理方法是返回 error,由调用者决定后续如何处理。但如果是无法恢复的错误,则可以手动触发 panic,同时,如果在程序运行过程中出现了类似于数组越界的错误,panic 也会被触发。所谓panic ,会中止当前执行的程序并退出。

下面是主动触发的例子:

// testPanic.go
package main

import "fmt"

func main() {
 fmt.Println("before panic")
 panic("crash")
 fmt.Println("after panic")
}

执行后:

$ go run testPanic.go
before panic
panic: crash

goroutine 1 [running]:
main.main()
 /Users/Code/goProject/testPanic.go:8 +0x95
exit status 2

下面是数组越界触发的 panic

// testPanic.go
package main

import "fmt"

func main() {
 arr := []int{ 1, 2, 3}
 fmt.Println(arr[4])
}

执行:

$ go run testPanic.go
panic: runtime error: index out of range [4] with length 3

goroutine 1 [running]:
main.main()
 /Users/Code/goProject/testPanic.go:8 +0x1d
exit status 2

defer

panic 会导致程序被中止,但是在退出前,会先处理完当前协程上已经defer 的任务,执行完成后再退出。

// testDefer.go
func main() {
 defer func() {
  fmt.Println("defer func")
 }()

 arr := []int{ 1, 2, 3}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值