🌞

Golang系列教程--流程控制

「流程控制」

开发人员控制程序执行路径的方式,常见的流程控制语句包括条件判断、循环、跳转,以实现程序的执行顺序控制。

📜本文内容


🐵if/else分支
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
if 条件 {
  ...
  ...
}else{
  ...
  ...
}

//条件可写在同一行,但是不同条件间要加上;隔开
if 条件1; 条件2 .. {
  ...
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main

import "fmt"

func main() {
  personAge := map[string]int{
  	"Amy" : 1,
  	"Daming" : 2,
  	"Lily" : 3,
  }

  if value, ok := personAge["Amy"]; ok == true{
    fmt.Println("Amy’s value is ", value)
  } else {
    fmt.Println("Amy is not here.")
  }
}
1
 Amy’s value is 1
🐵switch分支
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
switch 变量:{
  case 条件1:
    ...
  case 条件2:
    ...
  case 条件3:
    ...
  case 条件4:
    ...
  case 条件5, 条件6, 条件7, 条件8://多个条件选项并列用,隔开
    ...
  default://上述条件不满足时进入此逻辑
    ...
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package main

import "fmt"

func main() {
  number := 3
  switch number{
  case 1,2:
        fmt.Println("number是基础类")
    case 3:
        fmt.Println("number是特别类")
    default:
        fmt.Println("number为其他类")
  }
}

注意:

  • 与其他语言不同,Go中的switch,在执行完一个case后默认退出switch,不会再做其他的case判断
  • fallthrough:用于继续执行下一个case

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    package main
    
    import "fmt"
    
    func main() {
    
    switch number := 6 ;{
      case number > 0:
          fmt.Println("number大于0")
          fallthrough
      case number < 10:
          fmt.Println("number小于10")
          fallthrough
      case number > 5:
          fmt.Println("number大于5")
    }
    1
    2
    3
    
    number大于0
    number小于10
    number大于5
🐵select分支

select监听IO操作,常用于监听channel,可阅读 Golang系列教程--Channel

🐵for循环

Go语言中没有while语句,用for来描述循环

1
2
3
for 初始值 ; 满足范围; 操作{
  ...
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import "fmt"

func main() {
    for k := 1; k <= 10; k++{
        fmt.Printf("k is :%d\n", k)
    }

    // 多个变量控制,用,隔开
    for i, j := 10, 1; i >= 1 && j <= 10; i, j = i-1, j+1 {
		fmt.Printf("%d * %d = %d\n", j, i, j*i)
	}
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
k is :1
k is :2
k is :3
k is :4
k is :5
k is :6
k is :7
k is :8
k is :9
k is :10

# 多个变量控制输出结果
1 * 10 = 10
2 * 9 = 18
3 * 8 = 24
4 * 7 = 28
5 * 6 = 30
6 * 5 = 30
7 * 4 = 28
8 * 3 = 24
9 * 2 = 18
10 * 1 = 10

支持continue和break

break用于终止当前所在的for循环,continue表明本次循环中不执行continue后续的语句,直接进入下一次循环

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main

import "fmt"

func main() {

    // continue完成了只输出k>5的取值
    for k := 1; k <= 10; k++{
        if k <= 5{
            continue
        }
        fmt.Printf("k is :%d\n", k)
    }


    // break让i=10时退出for循环
    for i := 1; ; i = i+1 {
        if i == 10{
            fmt.Printf(" is :%d\n", i)
            break
        }
        fmt.Printf("i is :%d\n", i)
	}

}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
本例中continue的效果
k is :6
k is :7
k is :8
k is :9
k is :10

本例中break的效果
i is :1
i is :2
i is :3
i is :4
i is :5
i is :6
i is :7
i is :8
i is :9
i is :10
🐵goto跳转

goto使得程序直接到指定行执行,不过不建议常用,goto容易造成程序流程混乱

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import "fmt"

func main() {
  for i := 1; i <= 10 ; i = i+1 {
      if i % 2 == 0 {
          goto Find
      }
      fmt.Printf("i is :%d\n", i)
	}

  Find:fmt.Println("偶数出现")
}
1
2
i is :1
偶数出现
updatedupdated2019-12-162019-12-16