zoukankan      html  css  js  c++  java
  • golang 用defer 捕获error 需小心

    有时一个函数内需要根据最后是否出错,决定是否执行某个操作。这时候如果函数的分支又比较多,就会比较麻烦了。
    defer 处理这个情况刚好合适

    
    func main() {
    	var err error
    
    	byErr(&err)
    
    	defer byErr(&err)
    
    	defer func(err *error) {
    		byErr2(*err)
    	}(&err)
    
    	err = errors.New("hi,beautiful girl")
    	byErr(&err)
    
    }
    
    func byErr(err *error) {
    	if *err != nil {
    		log.Println("is err")
    	}else {
    		log.Println("is nil")
    	}
    }
    
    func byErr2(err error) {
    	if err != nil {
    		log.Println("is err")
    	}else {
    		log.Println("is nil")
    	}
    }
    
    
    

    结果如下

    2019/06/21 09:25:43 is nil
    2019/06/21 09:25:43 is err
    2019/06/21 09:25:43 is err
    2019/06/21 09:25:43 is err
    

    代码里两种方法都是可行的,但需要注意的是,稍不注意 照以下方式用 就bug了:

    1,如果直接用 err 作为参数,会,恒为nil
    2,如果用err 的指针作为参数, 会恒不为 nil

  • 相关阅读:
    qt学习笔记(1):qt点击运行没有反应。
    JS Object类型
    JS Boolean数据类型和数据类型转换规律
    CSS雪碧图
    CSS
    PS基础
    JS number数字类型
    js中的变量和数据类型
    JS 基础
    单词
  • 原文地址:https://www.cnblogs.com/mingbai/p/11062753.html
Copyright © 2011-2022 走看看