Golang 异常处理(panic、recover、defer)

 例1:

func panicTest() {
   defer func(){
      if p:= recover(); p != nil {
         fmt.Println("reover panic")
      }
   }()
   panic(errors.New("this is a panic"))
}
func (u *User) OrgList(ctx *gin.Context)  {

   fmt.Println("before panic")

   panicTest()

   fmt.Println("after panic")
}

返回结果:

before panic
reover panic
after panic

例2:

func panicTest() {
   /*defer func(){
      if p:= recover(); p != nil {
         fmt.Println("reover panic")
      }
   }()*/
   panic(errors.New("this is a panic"))
}


func (u *User) OrgList(ctx *gin.Context)  {

   fmt.Println("before panic")

   panicTest()

   fmt.Println("after panic")
}

返回结果:

before panic
2020/08/10 09:59:04 http: panic serving [::1]:53170: this is a panic
goroutine 36 [running]:
net/http.(*conn).serve.func1(0xc0004140a0)
        D:/go/src/net/http/server.go:1772 +0x140
panic(0xce2880, 0xc0002ae980)
        D:/go/src/runtime/panic.go:973 +0x3a4
yunke_course/controller.panicTest(...)
        D:/goproject/src/yunke_course/controller/user.go:44
yunke_course/controller.(*User).OrgList(0x15c7038, 0xc00050e000)
        D:/goproject/src/yunke_course/controller/user.go:54 +0xbd
github.com/gin-gonic/gin.(*Context).Next(0xc00050e000)
        D:/goproject/pkg/mod/github.com/gin-gonic/gin@v1.6.3/context.go:161 +0x42
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc00020bb80, 0xc00050e000)
        D:/goproject/pkg/mod/github.com/gin-gonic/gin@v1.6.3/gin.go:409 +0x66d
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc00020bb80, 0xf62660, 0xc0002da380, 0xc000405100)
        D:/goproject/pkg/mod/github.com/gin-gonic/gin@v1.6.3/gin.go:367 +0x154
net/http.serverHandler.ServeHTTP(0xc0002da2a0, 0xf62660, 0xc0002da380, 0xc000405100)
        D:/go/src/net/http/server.go:2807 +0xaa
net/http.(*conn).serve(0xc0004140a0, 0xf64e60, 0xc000403440)
        D:/go/src/net/http/server.go:1895 +0x873
created by net/http.(*Server).Serve
        D:/go/src/net/http/server.go:2933 +0x363
 

注:

例1 中在defer的recover中使用panic程序虽然会抛出异常,但是不会停止运行

例2 直接panic的话就会抛出异常,程序停止运行

 

 


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值