defer 是在函数退出前实行。另外需要注意的是函数的参数是值传递的。

看下面的例子:
Go: 值传参
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))
}
|
输出的结果是:
Bash: out put
如果要输出20 就用指针作为函数参数,代码改为:
Go: 指针参数
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))
}
|
输出:
Bash: out put
也可以使用闭包函数更简单处理:
Go: 闭包函数
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
}
|
输出
Bash: out put
用闭包还是指针,就看自己的需求了
本文网址: https://golangnote.com/topic/74.html 转摘请注明来源