Go—–使用defer的陷阱
defer关键字用来推迟执行某个语句或函数到任意位置执行return语句之后。常用在:文件流的关闭、解锁一个加锁的资源、关闭数据库链接等。函数中存在defer语句时的执行顺序是:先return后执行defer语句,最后才结束函数调用。以下面几个测试作为例子进行讲解。
小测试
下面的几个test结果会是多少呢?先自己思考下结果,答案在文章后面。
teet1
package main
import "fmt"
func main() {
i := 0
defer fmt.Println(i)
i++
return
}
test2
package main
import "fmt"
func main() {
fmt.Println(test())
}
func test() (result int) {
defer func() {
result++
}()
return 0
}
test3