go琐碎知识点

Defer

1、如果函数里面有多条defer指令,他们的执行顺序是反序,即后定义的defer先执行。

2、defer函数的参数是在defer语句出现的位置做计算的,而不是在函数运行的时候做计算的,即所在函数结束的时候计算的。

3、在defer语句里使用多条语句可以使用匿名函数

defer函数的参数在defer语句出现的位置计算,不是在defer函数运行的时刻计算;

4、defer函数会影响宿主函数的返回值

package main

import "log"

func foo1(i *int) int {
    *i += 100
    defer func() { *i += 200 }()
    log.Printf("i=%d", *i)
    return *i
}

func foo2(i *int) (r int) {
    *i += 100
    defer func() { r += 200 }()
    log.Printf("i=%d", *i)
    return *i
}

func foo3(i int) int {
    i += 100
    defer func() { i += 200 }()
    log.Printf("i=%d", i)
    return i
}

func main() {
    var i, r int

    i, r = 0, 0
    r = foo1(&i)
    log.Printf("i=%d, r=%d\n", i, r)

    i, r = 0, 0
    r = foo2(&i)
    log.Printf("i=%d, r=%d\n", i, r)

    i,r = 0,0
    r = foo3(i)
    log.Printf("i=%d, r=%d\n", i, r)

}
    2021/01/05 17:41:06 i=100                     //foo1 defer打印
    2021/01/05 17:41:07 i=300, r=100             //foo1 main打印
    2021/01/05 17:41:07 i=100                     //foo2 defer打印
    2021/01/05 17:41:07 i=100, r=300             //foo2 main打印
    2021/01/05 17:41:07 i=100                     //foo3 defer打印
    2021/01/05 17:41:07 i=0, r=100                 //foo3 main打印
全部评论

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务