funcswitchDemo4() { age := 30 switch { case age < 25: fmt.Println("好好学习吧") case age > 25 && age < 35: fmt.Println("好好工作吧") case age > 60: fmt.Println("好好享受吧") default: fmt.Println("活着真好") } }
fallthrough 语法可以执行满足条件的 case 的下一个 case,是为了兼容 C 语言中的 case 设计的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
funcswitchDemo5() { s := "a" switch { case s == "a": fmt.Println("a") fallthrough case s == "b": fmt.Println("b") case s == "c": fmt.Println("c") default: fmt.Println("...") } }
1 2
a b
break
break 语句可以结束 for, switch 和 select 的代码块。
break 语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的 for, switch 和 select 的代码块上。
1 2 3 4 5 6 7 8 9 10 11 12
funcbreakDemo1() { BREAKDEMO1: for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { break BREAKDEMO1 } fmt.Printf("%v-%v\n", i, j) } } fmt.Println("...") }
1 2 3
0-0 0-1 ...
continue
continue 语句可以结束当前循环,开始下一次的循环迭代过程,仅限在 for 循环内使用。
在 continue 语句后添加标签时,表示开始标签对应的循环,例如:
1 2 3 4 5 6 7 8 9 10 11 12
funccontinueDemo() { forloop1: for i := 0; i < 5; i++ { // forloop2: for j := 0; j < 5; j++ { if i == 2 && j == 2 { continue forloop1 } fmt.Printf("%v-%v\n", i, j) } } }
goto
goto 语句通过标签进行代码间的无条件跳转, goto 语句可以在快速跳出循环,避免重复退出上有一定的帮助, Go 语言中使用 goto 语句能简化一些代码的实现过程,例如双层嵌套的 for 循环要退出时:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
funcgotoDemo1() { var breakFlag bool for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { // 设置退出标签。 breakFlag = true break } fmt.Printf("%v-%v\n", i, j) } // 外层for循环判断。 if breakFlag { break } } }
使用 goto 语句能简化代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
funcgotoDemo2() { for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { // 设置退出标签。 goto breakTag } fmt.Printf("%v-%v\n", i, j) } } return // 标签。 breakTag: fmt.Println("结束for循环") }