码迷,mamicode.com
首页 > 其他好文 > 详细

defer 的常用场景

时间:2019-01-10 21:42:28      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:注意   转化   fun   var   语句   error:   %s   import   main   

将panic的转化为error类型值,并将其作为函数值返回给调用方

package main
import "fmt"

func divide(a, b int) (res int, err error) {
  defer func() {
    if rec := recover(); rec != nil {
      err = fmt.Errorf("%s", rec)
    }
  }()
  res = a / b
  return
}

func main() {
  res, err := divide(1, 0)
  fmt.Println(res, err) // 0 runtime error: integer divide by zero
  res, err = divide(2, 1)
  fmt.Println(res, err) // 2 <nil>
}

保证sync.Mutex同步锁得到解锁

var mux  sync.Mutex
mux.Lock()
defer mux.Unlock() //注意这里Lock和Unlock是紧挨在一起的,使用defer语句保证Unlock方法一定调用,中间不要加入其他代码,防止发生panic,defer语句没有执行到

defer 的常用场景

标签:注意   转化   fun   var   语句   error:   %s   import   main   

原文地址:https://www.cnblogs.com/linyihai/p/10252407.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!