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

  • 相关阅读:
    jquery 初篇
    python作用域和js作用域的比较
    javascript作用域
    第三篇、dom操作续
    dom事件
    第二篇 dom内容操作之value
    第三篇、变量
    第二篇、常量
    Node.js
    测试用例
  • 原文地址:https://www.cnblogs.com/JS1990499200/p/13441590.html
Copyright © 2011-2022 走看看