美文网首页
Go语言defer函数运行流程

Go语言defer函数运行流程

作者: Jaeyok | 来源:发表于2020-11-17 16:42 被阅读0次

defer函数会将后面的函数依次入栈,入栈的同时将函数中所需的变量值值也拷贝到栈里面了,因此后面改变函数变量的值,defer执行的时候,变量值仍是入栈时的值,并未改变。举例如下:

package main

import (
    "fmt"
)
//可变参数放在形参列表中最后
//init函数在Main之前执行

func test() int{
    fmt.Println("funck")
    return 90
}
var age =test()

func swap( a *int, b *int)   {
    t := *a
    *a=*b
    *b =t
    fmt.Println("a=",*a,"b=",*b)

}

func main(){
    a :=10
    b :=20
    defer fmt.Println("a=", a)//入栈时同时将值也拷贝到栈里面了
    defer fmt.Println("b=", b)//在defer后可以继续使用,系统自动关闭资源
    swap(&a,&b)
   fmt.Println(a,b)
}

由于defer函数将两个println函数入栈时,拷贝了当前变量a,b的数值。两个Print函数在最后依次执行(依次出栈),输出的数值为一开始定义的a和b,后来经过交换值函数swag并不影响。

相关文章

  • Go语言defer函数运行流程

    defer函数会将后面的函数依次入栈,入栈的同时将函数中所需的变量值值也拷贝到栈里面了,因此后面改变函数变量的值,...

  • defer

    Go 语言的 defer 会在当前函数或者方法(不是main)返回之前执行函数。由于 defer 的延迟特性,de...

  • Go基础笔记

    Go语言基础(一) 流程控制语句:for、if、else、switch、defer for Go只有一种循环结构:...

  • Go函数-延迟调用(三)

    在go语言里,defer可是实现延迟函数调用。语句defer向当前函数注册稍后执行的函数调用。这些调用被称做延迟调...

  • Golang学习笔记-defer关键字学习

    defer学习 很多现代的变成语言中都会有defer关键字,Go语言的defer会在当前函数或是方法返回之前执行传...

  • GO语言-函数defer

    packagemainimport"fmt"funccalc(indexstring,a,bint)int{ret...

  • Go语言defer关键字

    Go语言defer关键字 defer关键字用于延缓函数的执行 只需要在调用普通函数或方法前加上关键字defer,就...

  • go语言的defer语句

    go语言defer语句的用法 defer的语法 defer后面必须是函数调用语句,不能是其他语句,否则编译器会出错...

  • 用匿名函数巧妙验证go语言中defer执行顺序

    defer的执行顺序 在go语言当中,defer通常是在函数当中使用。当函数执行到最后一行代码(包括return)...

  • Go语言 defer

    参考文章:深入理解Go语言 defer用于资源的释放,会在函数返回之前进行调用 defer关键字的实现跟go关键字...

网友评论

      本文标题:Go语言defer函数运行流程

      本文链接:https://www.haomeiwen.com/subject/mxtfiktx.html