go语言基础 -- defer及其用法

defer设计思想

在go语言中,程序员创建的资源如文件句柄、数据库连接、锁等,需要在函数执行完毕后释放,因此go提供了defer的机制,在函数退出时去释放defer指定的资源,这样我们在一些资源申请的时候,可以先defer 声明释放语句,无需担心后续忘记释放资源。defer利用了栈,先声明的defer后执行。
我们来看一个简单的例子:

package main
import (
    "fmt"
)

func sum(n1 int, n2 int) int {
    defer fmt.Println("n1:", n1)
    defer fmt.Println("n2:", n2)
    n3 := n1 + n2
    fmt.Println("n3:", n3
    return n3
}

func main() {
    res := sum(10, 20)
    fmt.Println("res:", res)
}

上面的输出会先输出n3,然后在函数退出时执行defer的栈内容,先输出n2,再输出n1,最后输出res
需要注意的是,defer在将语句入栈的时候,会将相关的值拷贝同时入栈,这意味着我们defer之后对变量的变更不会影响入栈时的值

你可能感兴趣的:(go/golang基础及实践,golang,开发语言,后端)