zoukankan      html  css  js  c++  java
  • defer 的常用场景

    将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语句没有执行到
    
    
  • 相关阅读:
    Python-内置函数
    Python-匿名函数
    Python-函数递归-二分法
    Python-函数递归
    Day4-函数
    CSS-定位
    CSS-文本属性,文字属性
    CSS-浮动
    CSS-盒模型
    CSS-继承和层叠
  • 原文地址:https://www.cnblogs.com/linyihai/p/10252407.html
Copyright © 2011-2022 走看看