go容易忽视的黑坑系列2
- 推断下面代码输出结果:可能有同学会测试为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var f = func(i int) {
fmt.Println("x")
}
func main(){
f := func(i int) {
println(i)
if i > 0 {
f(i-1)
}
}
f(10)
}但实际是:1
2
3
43
2
1
0这是因为main函数在构造的时候全局f函数已经构造完成,所以使用的是全局f函数。而且如果改成为我们想像的逻辑,反而会报错:1
23
x1
2
3
4
5
6
7
8
9
10
11
12
13
14
15func main(){
fi := func(i int) {
println(i)
if i > 0 {
fi(i-1)
}
}
f(3)
}
// 错误:
# command-line-arguments
./main.go:314:4: undefined: fi