defer 是在函数退出前实行。另外需要注意的是函数的参数是值传递的。
看下面的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main
import "fmt"
func main() {
var m int
m = 10
fmt.Println(m)
defer Print(m)
m = 20
}
func Print(m interface{}) {
fmt.Println(m.(int))
}
输出的结果是:
1
2
10
10
如果要输出20 就用指针作为函数参数,代码改为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import "fmt"
func main() {
var m *int
m = new(int)
*m = 10
fmt.Println(*m)
defer Print(m)
*m = 20
}
func Print(m interface{}) {
fmt.Println(*m.(*int))
}
输出:
1
2
10
20
也可以使用闭包函数更简单处理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import "fmt"
func main() {
var m int
m = 10
fmt.Println(m)
// 可以用闭包函数,跟了一个匿名函数,就是闭包了,闭包相当于把指针准备好了.
defer func() {
fmt.Println(m)
}()
m = 20
}
输出
1
2
10
20
用闭包还是指针,就看自己的需求了
本文网址: https://golangnote.com/topic/74.html 转摘请注明来源