当for循环和switch结合

15 阅读1分钟

早几天,在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
}