Go Lang 实战

Go函数-延迟调用(三)

2019-08-01  本文已影响0人  草莓君_

在go语言里,defer可是实现延迟函数调用。语句defer向当前函数注册稍后执行的函数调用。这些调用被称做延迟调用,因为它们知道当前函数执行结束前才被执行,常用于资源释放、解除锁定,以及错误处理等操作。

func main() {
    f, err := os.Open("./main.go")
    if err != nil {
        log.Fatal(err)
    }

    defer f.Close()    //仅注册,直到main退出前才执行

    println("hello world")
}

延迟调用注册的是调用,必须提供执行所需参数(哪怕为空)。参数值在注册时被复制并缓存起来。如对状态敏感,可改用指针。

func main() {
    x, y := 1, 2

    defer func(a int) {
        println("defer x, y =",a, y)  //y为闭包引用
    }(x)                    //注册时复制调用参数

    x += 100                    //对x的修改不会影响延迟调用
    y += 200
    println(x, y)
}

输出:

101 202
defer x, y = 1 202
上一篇 下一篇

猜你喜欢

热点阅读