Go 语言中,defer 语句用于在函数退出之前执行一段代码。defer 语句的执行顺序是后进先出,也就是说,最后调用的 defer 语句会先执行,第一个调用的 defer 语句会最后执行。
例如,以下代码中,defer 语句会按以下顺序执行:
Go
func main() {
defer fmt.Println("1")
defer fmt.Println("2")
defer fmt.Println("3")
fmt.Println("4")
}
输出:
3
2
1
4
defer 语句可以用于清理资源、记录日志等。例如,以下代码使用 defer 语句来确保文件被正确关闭:
Go
func main() {
file, err := os.Open("myfile.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// ... 使用 file 进行操作 ...
}
如果在使用 file 过程中发生错误,defer 语句仍然会执行,确保文件被正确关闭。
以下是一些使用 defer 语句的注意事项:
- defer 语句不能用于修改函数返回值。
- defer 语句不能用于延迟执行 panic。
- defer 语句不能用于延迟执行另一个 defer 语句。