2.7 流程控制

if

用法:

  1. if condition {
  2. // do something
  3. }
  1. if condition {
  2. // do something
  3. } else {
  4. // do something
  5. }
  1. if condition1 {
  2. // do something
  3. } else if condition2 {
  4. // do something else
  5. }else {
  6. // catch-all or default
  7. }

switch

相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活。它接受任意形式的表达式:

  1. switch var1 {
  2. case val1:
  3. ...
  4. case val2:
  5. ...
  6. default:
  7. ...
  8. }

for

  1. for 初始化语句; 条件语句; 修饰语句 {}

示例:

  1. for i := 0; i < 5; i++ {
  2. fmt.Printf("This is the %d iteration\n", i)
  3. }

for-range

这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合,语法上很类似其它语言中 foreach 语句。

  1. for pos, char := range str {
  2. ...
  3. }

示例:

var a = [10]int{1,2,3,4,5,6,7,8,9,0}

for _, e := range a { fmt.Println(e) }

Break 与 continue

break退出循环, continue调到下一个循环

  1. for i:=0; i<3; i++ {
  2. for j:=0; j<10; j++ {
  3. if j>5 {
  4. break
  5. }
  6. print(j)
  7. }
  8. print(" ")
  9. }
  10. 结果:
  11. 012345 012345 012345
  1. for i := 0; i < 10; i++ {
  2. if i == 5 {
  3. continue
  4. }
  5. print(i)
  6. print(" ")
  7. }

label

Go语言也支持label(标签)语法:分别是break labe、 goto label和continuelabel。

  1. package main
  2. import "fmt"
  3. func main() {
  4. Loop:
  5. for i := 0; i < 10; i++ {
  6. fmt.Println("label i is ", i)
  7. for j := 0; j < 10; j++ {
  8. if j > 5 {
  9. //跳到外面去啦,但是不会再进来这个for循环了
  10. break Loop
  11. }
  12. }
  13. }
  14. //跳转语句 goto语句可以跳转到本函数内的某个标签
  15. gotoCount := 0
  16. GotoLabel:
  17. gotoCount++
  18. if gotoCount < 10 {
  19. goto GotoLabel //如果小于10的话就跳转到GotoLabel
  20. }
  21. fmt.Println(gotoCount)
  22. Clabel:
  23. for a < 20 {
  24. if a == 15 {
  25. a++
  26. continue Clabel
  27. }
  28. fmt.Println(a)
  29. a++
  30. }
  31. }
  32. }

输出:

label i is 0 10 10 11 12 13 14 16 17 18 19

links