在Go语言中,defer语句会在该函数结束的时候被调用,即使后面的语句运行时出现异常了defer语句仍然会被执行。
需要注意的是,如果defer语句中引用了参数,则该参数的值将是程序到defer这一行的时候的值,而与后面的语句没有关系。
以下为简单测试:
package main import "fmt" func main() { func_b_0() func_b_1() func_b_2() } func func_b_0() { fmt.Println("func_b_0...top") a := 5 defer fmt.Println("a=", a) a++ } func func_b_1() { fmt.Println("func_b_1...top") a := 5 defer func() { fmt.Println("a=", a) }() a++ } func func_b_2() { fmt.Println("func_b_2...top") a := 5 defer func(a int) { fmt.Println("a=", a) }(a) a++ }输出:
func_b_0...top a= 5 func_b_1...top a= 6 func_b_2...top a= 5
有疑问加站长微信联系(非本文作者)