Go的推延(Defer)
Go的延迟(Defer)
Go的延迟(Defer)是一个很有意思的特性,有点相当于Java try{}catch{}的finally,最后始终会被执行。也有区别:
1.defer的参数是在程序编译时已计算好了,而非函数执行时,如
输出:
而非1.
2.同时使用多个defer时遵循LIFO后进先出原则,如
输出:
Go的延迟(Defer)是一个很有意思的特性,有点相当于Java try{}catch{}的finally,最后始终会被执行。也有区别:
1.defer的参数是在程序编译时已计算好了,而非函数执行时,如
i := 0 defer fmt.Println(i) i = 1
输出:
0
而非1.
2.同时使用多个defer时遵循LIFO后进先出原则,如
i := 0 defer fmt.Println(i) i = 1 defer fmt.Println(i) i = 2 defer fmt.Println(i)
输出:
2 1 0