zoukankan      html  css  js  c++  java
  • go语言defer的学习

    伪代码:

    defer fmt.Printf("aaaaaa ")

    defer fmt.Printf("bbbbbb ")

    test(0)

    defer fmt.Printf("ccccccc ")

    ps:test是一个错误的函数

    运行结果:

    bbbbbbb

    aaaaaaa

    defer是一个压栈操作,在函数执行结束时运行  因为test()的时候就已经崩了 所以CCCC没有压栈自然就无法打印

    伪代码:

    defer fmt.Printf("aaaaaa ")

    defer fmt.Printf("bbbbbb ")

    defer test(0)

    defer fmt.Printf("ccccccc ")

    运行结果:

    ccccccccc

    bbbbb

    aaaaa

    defer的特性就是无论程序是否出错都会执行

    func main(){

      a,d : = 10,20

      defer func (a int,b int){

      fmt.Printf("%d %d ",a,b)

    }(a,b)

    a+=100

    b+=100

    }

     运行结果:

    10  20

    这就是匿名函数传参调用和 捕获调用的区别了 在defer压栈的时候就已经相当于值传递进去了

    如果是捕获调用的话输出结果就是

    110  120

  • 相关阅读:
    将u8BF7字符串转换为汉字
    ubuntu扩容
    python面试题
    OCR开源项目
    58到家数据库30条军规解读
    dvwa sql盲注教程
    python time模块详解,时间格式转换
    python正则表达式
    tr命令详解
    腐烂
  • 原文地址:https://www.cnblogs.com/JS1990499200/p/13441590.html
Copyright © 2011-2022 走看看