- 用途:含有
defer
语句的函数,会在该函数将要返回之前,调用另一个函数。 defer
不仅限于函数的调用,调用方法也是合法的。- 并非在调用延迟函数的时候才确定实参,而是当执行
defer
语句的时候,就会对延迟函数的实参进行求值:
func printA(a int) {
fmt.Println(a)
}
func main() {
a := 5
defer printA(a)
a = 10
fmt.Println(a)
// output:
/*
10
5
*/
}
- 当一个函数内多次调用
defer
时,Go会把defer
调用放入到一个栈中,随后按照后进先出的顺序执行。 - 当一个函数应该在与当前代码流无关的环境下调用时,可以使用
defer
。
reference: