Golang 第五章 8.defer
defer 语句用于 在函数返回前延迟执行某个操作。
常用于释放资源、解锁、文件关闭等
即使函数因错误提前返回,defer 也会执行
基本语法
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}输出:
hello
worlddefer 的调用在函数返回前执行
执行顺序 后进先出(LIFO)
defer 与函数返回
func f() int {
x := 5
defer fmt.Println("defer:", x)
x += 1
return x
}
fmt.Println("return:", f())输出:
defer: 6
return: 6defer 执行时读取 当时变量的值
return 语句计算返回值后才执行 defer
defer 多条语句
func main() {
defer fmt.Println("first")
defer fmt.Println("second")
defer fmt.Println("third")
}输出:
third
second
first后定义的 defer 先执行
LIFO 栈顺序
defer 常见应用
关闭文件
f, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()确保函数退出前关闭文件
解锁互斥锁
mu.Lock()
defer mu.Unlock()保证解锁操作执行,即使函数中间返回
记录函数执行时间
start := time.Now()
defer func() {
fmt.Println("耗时:", time.Since(start))
}()注意事项
defer 会 增加少量开销
defer 调用顺序是 后进先出
defer 语句执行时会捕获 当时的参数值
v2ray节点购买


评论