- 感觉是 go 的一个 bug 啊,网上解释说是因为 switch 之后的打括号放在下一行,所以 go 编译器默认在 switch f()之后加了一个分号。下面的 case 用的是系统默认的 switch 值 true 所以输出 true。但是如果不写 switch 那一行,编译器就直接报错了,说明 switch 和下面的 case 是分不开的啊。
- 对于类型 *[]int 和 *[3]int,可以对后者 range 操作,但是前者报编译器错误
- 对于第三个就不理解了,请哪位大佬出来解释下。
测试代码: https://play.golang.org/p/7D3nEYF3UFX
// #1
f := func() bool { return false }
switch f()
{
case true:
println("true")
case false:
println("false")
}
// #2
arr := [3]int{1,2,3}
arrPtrOfLen := &arr
for i := range arrPtrOfLen { println(i) }
arr2 := []int{1,2,3}
arrPtrOfVar := &arr2
for j := range arrPtrOfVar { println(j) }
//// arrPtrOfVar compile error: cannot range over data (type *[]int)
// #3
for k := range (*[3]int) (nil) {
println(k)
}