zoukankan      html  css  js  c++  java
  • golang学习笔记---defer[延迟函数]

    语法:

    defer function_name()

    1)defer在声明时不会执行,而是推迟执行,在return执行前,倒序执行defer[先进后出],一般用于释放资源,清理数据,记录日志,异常处理等。

    2)defer有一个特性:即使函数抛出异常,defer仍会被执行,这样不会出现程序错误导致资源不被释放,或者因为第三方包的异常导致程序崩溃。

    3)一般用于打开文件后释放资源的操作,比如打开一个文件,最后总是要关闭的。而在打开和关闭之间,会有诸多的处理,可能会有诸多的if-else、根据不同的情况需要提前返回

    f, = os.open(filename)
    defer f.close()
    do_something()
    if (condition_a) {return}
    do_something_again() 
    if (condition_b) {return}
    do_further_things()
    

      

    package main
    
    import "fmt"
    
    func deferTest(number int) int {
    	defer func() {
    		number++
    		fmt.Println("three:", number)
    	}()
    
    	defer func() {
    		number++
    		fmt.Println("two:", number)
    	}()
    
    	defer func() {
    		number++
    		fmt.Println("one:", number)
    	}()
    
    	return number
    }
    
    func main() {
    	fmt.Println("函数返回值:", deferTest(0))
    }
    

      

    /*
    one: 1
    two: 2
    three: 3
    函数返回值: 0
    */

  • 相关阅读:
    HRBUST 1819 石子合并问题--圆形版
    Linux 用户信息英文解释
    day 09 Linux下常见的打包压缩命令
    day 09作业
    第8天作业
    day 08 重定向/管道/sort/uniq/awk详解
    什么是输出重定向
    day07 Linux文件类型及软链接
    第6,7天作业
    day06 Linux根目录下重要目录
  • 原文地址:https://www.cnblogs.com/saryli/p/13201180.html
Copyright © 2011-2022 走看看