GO语言中额defer

defer语句延迟执行一个函数,该函数被推迟到当包含它的程序返回时(包含它的函数 执行了return语句/运行到函数结尾自动返回/对应的goroutine panic)执行。

每次defer语句执行时,defer修饰的函数的返回值和参数取值会照常进行计算和保存,但是该函数不会执行。等到上一级函数返回前,会按照defer的声明顺序倒序执行全部defer的函数。defer的函数的任何返回值都会被丢弃。

package main

import "fmt"

func test() {

    f := func(){ fmt.Println("Test") }
    defer fmt.Println("Test2")
    defer f()
    // f = nil    // 这里将函数的“值”设为nil,此时再尝试执行这个函数的时候
    defer fmt.Println("Test1")
    defer f()
}
func main() {
    test()
}

输出
Test
Test1
Test
Test2

可以看出在一个方法中,defer是倒序执行的

    原文作者:丶花藻浅溪
    原文地址: https://www.jianshu.com/p/1412fb5854c7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞