流程控制是对程序在不同条件下的执行顺序的控制。通俗来讲,就是不同的代码在什么情况下才执行,哪些先执行,哪些后执行。

一般来说,程序代码的执行是从上往下顺序执行,但它这并不准确,如果有流程控制语句,只有当控制语句中指定条件得到满足时才执行相应的代码。

流程控制语句主要有:条件语句(if/else)、循环语句(for)、选择语句(switch/case)

条件语句(if)

if 条件语句,条件语句返回的结果必须为bool类型

var score = 80

if score >= 80 {
    fmt.Println("优秀")
} else if score >= 60 {
    fmt.Println("及格")
} else {
    fmt.Println("不及格")
}

选择语句(switch)

switch选择语句,从上至下,依次匹配,一旦匹配,不在向下匹配其他条件

var grade = "A"

switch grade {
case "A":
    fmt.Println("优秀")
    // break,go语言中自带break语句
case "B":
    fmt.Println("良好")
case "C":
    fmt.Println("及格")
default: // 如果前面的条件没有命中,则运行defalut里的语句
    fmt.Println("不及格")
}

循环结果(for)

for 是一个循环控制结构的语句,由初始语句、条件控制语句和结尾语句构成。

// 从0打印到10
for i := 0; i <= 10; i++ {
    fmt.Println(i)
}

当然,初始语句、条件控制语句和结尾语句都不是必须的,下面是一个省略初始语句的循环结构。

var j = 10
// 省略掉初始语句,从0打印到10
for ; j >= 0; j-- {
    fmt.Println(j)
}

下面是没有初始语句和结尾语句的一个循环结构。

var k = 10
for k >= 0 { // 省略初始语句和结尾语句,类似其他语言的while语句
    k--
    fmt.Println(k)
}

不带任何条件的for语句,但可以使用continue跳过本次循环,break终止循环。

var l = 0
for {
    if l > 10 {
        break // 终止for循环
    }
    if l == 4 {
        continue // 跳过本次循环
    }
    fmt.Println(l)
    l++
}

九九乘法表

for i := 1; i < 10; i++ {
    for j := 1; j <= i; j++ {
        fmt.Printf("%d x %d = %d  ", j, i, j*i)
    }
    fmt.Println("")
}

输出结果:

1 x 1 = 1  
1 x 2 = 2  2 x 2 = 4  
1 x 3 = 3  2 x 3 = 6  3 x 3 = 9  
1 x 4 = 4  2 x 4 = 8  3 x 4 = 12  4 x 4 = 16  
1 x 5 = 5  2 x 5 = 10  3 x 5 = 15  4 x 5 = 20  5 x 5 = 25  
1 x 6 = 6  2 x 6 = 12  3 x 6 = 18  4 x 6 = 24  5 x 6 = 30  6 x 6 = 36  
1 x 7 = 7  2 x 7 = 14  3 x 7 = 21  4 x 7 = 28  5 x 7 = 35  6 x 7 = 42  7 x 7 = 49  
1 x 8 = 8  2 x 8 = 16  3 x 8 = 24  4 x 8 = 32  5 x 8 = 40  6 x 8 = 48  7 x 8 = 56  8 x 8 = 64  
1 x 9 = 9  2 x 9 = 18  3 x 9 = 27  4 x 9 = 36  5 x 9 = 45  6 x 9 = 54  7 x 9 = 63  8 x 9 = 72  9 x 9 = 81