作者:Mars酱
声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。
转载:欢迎转载,转载前先请联系我!
前言
defer是Go提供的关键字,defer用于资源的释放。一般在return之前执行,如果有多个defer,那么越靠后的defer越先执行。来我这里,我晚上辅导你~
三个defer例子
例子1
func f1() (result int) {
defer func() {
result++
}()
return 0
}
例子2
func f2() (result int) {
t := 5
defer func() {
t = t + 5
}()
return t
}
例子3
func f3() (result int) {
defer func(result int) {
result = result + 5
}(result)
return 1
}
分别调用三个函数
这三个带defer关键字的函数,调用之后返回什么?
// author: mars酱
func Test_defer(t *testing.T) {
result1 := f1()
fmt.Println(result1)
result2 := f2()
fmt.Println(result2)
result3 := f2()
fmt.Println(result3)
}
结果:
为什么
defer例子1
defer会在return之前执行,因此result的结果会先执行计算,因此返回的是1
defer例子2
内部声明了一个变量t,返回的变量是result,因此内部实际把t的值赋给了result,然后defer会优先于return之前执行,因此result的值并未改变,改变的是t的值,所以返回值是5
defer例子3
内部实际给result赋值为0,defer优于return之前执行,会在defer函数之前给result变量加5,改变了result的值,所以返回5