早几天,在debug代码时,一直得不出想要的结果,想了很久才发现代码那里有问题,隐去业务逻辑,大概的写法是这样的:
func TestAAA(t *testing.T) {
num := 0
for i := 0; i < 5; i++ {
num = calNum(i)
switch num {
case 4:
break
case 3:
break
}
}
fmt.Printf("num is %v", num)
}
func calNum(i int) int {
if i == 3 {
return i
}
return 0
}
输出结果是:num is 0
但我想要的结果是num is 3,为什么结果还是0呢? 原因就出在break,这里的break其实只是break switch,而跳出for循环的,故calNum函数一直执行到i == 4,值自然又被赋值为0了。
所以,在for循环中使用switch ,同时又使用break时,一直要留心!!!
正确的代码应为:
func TestAAA(t *testing.T) {
num := 0
for i := 0; i < 5; i++ {
num = calNum(i)
switch num {
case 4:
case 3:
}
if num != 0 {
break
}
}
fmt.Printf("num is %v", num)
}
func calNum(i int) int {
if i == 3 {
return i
}
return 0
}