目录
- 1. defer是LIFO,类似堆栈方式运行的
- 2. return与defer同时出现时,defer只有被return包裹才会运行
- 3. return变量时,并不是原子操作,分为赋值 + 返回,如果有defer将在赋值与返回间执行
- 匿名返回值
- 有名返回值
- 有名返回值临时赋值
1. defer是LIFO,类似堆栈方式运行的
示例
func test(){
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
return
}
运行结果
3
2
1
2. return与defer同时出现时,defer只有被return包裹才会运行
func test2(){
defer fmt.Println(1)
defer fmt.Println(2)
if true {
return
}
defer fmt.Println(3)
return
}
运行结果
2
1
3. return变量时,并不是原子操作,分为赋值 + 返回,如果有defer将在赋值与返回间执行
匿名返回值
func test3() int {
var i int
defer i++
return i
}
//等价
//func test3() int {
// var i int
// ret:=i
// defer i++
// return ret
//}
运行结果
0
有名返回值
func test4() (i int) {
defer i++
return i
}
//等价
//func test4() (i int) {
// defer i++
// return i
//}
运行结果
1
有名返回值临时赋值
func test3() (i int) {
var temp int
defer temp++
return temp
}
//等价
//func test3() (i int) {
// i=temp
// defer temp++
// return i
//}
运行结果
0
参考
/articles/14159