第5章：流程控制

引入

控制语句分类：

顺序结构

分支结构

循环结构

分支结构

if 分支

单分支

基本语法
if 条件表达式 {
逻辑代码
}
只有条件表达式为 true 时，才执行 {} 的逻辑代码

条件表达式两边可以加 ()，建议不加

If 和条件表达式中间必须有空格

{} 必须要有

Copy
package main

import "fmt"

func main() {
var a int = 25
var b int = 15
if a > b {
fmt.Println("a大于b")
}
//if后面可以用分号并列加入变量的定义
if a2 := 20; a2 < 10 {
fmt.Println("a小于b")
}
}

运行结果：

Copy
a大于b

双分支

基本语法
if 条件表达式 {
逻辑代码 1
} else {
逻辑代码 2
}
* 当条件表达式为 true 时，执行逻辑代码 1，否则执行逻辑代码 2 *

Copy
func main() {
if a := 10; a > 5 {
fmt.Println("a大于5")
} else {
fmt.Println("a不大于5")
}

if b := 10; b > 15 {
fmt.Println("b大于15")
} else {
fmt.Println("b不大于15")
}
}

运行结果：

Copy
a大于5
b不大于5

多分支

基本语法
if 条件表达式 {
逻辑代码 1
} else {
逻辑代码 2
}
......
else {
逻辑代码 n
}
* 依次执行，当有一个条件表达式为 true 时，直接执行对应的逻辑代码并结束运行，不再继续执行 *

Copy
package main

import "fmt"

func main() {
var a int = 50
if a > 10 {
fmt.Println("a大于10")
} else if a > 20 {
fmt.Println("a大于20")
} else if a > 30 {
fmt.Println("a大于30")
} else if a > 40 {
fmt.Println("a大于40")
} else {
fmt.Println("以上都不对")
}
}

运行结果：

Copy
a大于10

switch 分支

基本语法
switch 表达式 {
case 值 1, 值 2，......:
语句块 1
Case 值 3, 值 4，......:
语句块 2
......
default:
语句块
}
* 依次执行，当有一个 case 满足表达式时，直接执行对应的语句块并结束运行，不再继续执行 *

Copy
package main

import (
"fmt"
)

func main() {
var score int = 50
switch score / 10 {
case 10:
fmt.Println("等级为A")
case 9:
fmt.Println("等级为A")
case 8:
fmt.Println("等级为B")
case 7:
fmt.Println("等级为C")
case 6:
fmt.Println("等级为D")
case 5:
fmt.Println("等级为E")
case 4:
fmt.Println("等级为E")
case 3:
fmt.Println("等级为E")
case 2:
fmt.Println("等级为E")
case 1:
fmt.Println("等级为E")
case 0:
fmt.Println("等级为E")
default:
fmt.Println("成绩有误")
}
}

运行结果：

Copy
等级为E

循环结构

for 循环

基本语法
for (初始表达式；布尔表达式；迭代因子){
循环体；
}

Copy
package main

import "fmt"

func main() {
//求和1+2+3+4+5
//方法1
var n1 int = 1
var n2 int = 2
var n3 int = 3
var n4 int = 4
var n5 int = 5
var sum1 int
sum1 += n1
sum1 += n2
sum1 += n3
sum1 += n4
sum1 += n5
fmt.Println(sum1)
//方法2
var sum2 int
for i := 1; i <= 5; i++ {
sum2 += i
}
fmt.Println(sum2)
}

for range

可遍历数组，切片，字符串，map 以及通道

基本语法
for key, val := range coll {

}

Copy
import "fmt"

func main() {
var str string = "mojito"
//for i := 0; i < len(str); i++ {
// fmt.Printf("%c \n",str[i])
//}
for i, value := range str {
fmt.Printf("索引为：%d, 值为：%c \n", i, value)
}
}

运行结果：

Copy
索引为：0, 值为：m
索引为：1, 值为：o
索引为：2, 值为：j
索引为：3, 值为：i
索引为：4, 值为：t
索引为：5, 值为：o

关键字

break

执行本次循环再跳出整个循环

Copy
package main package main

import "fmt"

func main() {
var sum1 int
for i := 1; i <= 100; i++ {
sum1 += i
}
fmt.Println(sum1)

var sum2 int
for j := 1; j <= 100; j++ {
sum2 += j
if sum2 > 300 {
break
}
}
fmt.Println(sum2)
}

运行结果：

Copy
5050
325

continue

跳出本次循环，再继续后面的循环

Copy
import "fmt"

func main() {
//取1-100以内被6整除的数
for i := 1; i <= 100; i++ {
if i%6 != 0 {
continue
}
fmt.Println(i)
}
}

运行结果：

Copy
6
12
18
24
30
36
42
48
54
60
66
72
78
84
90
96

goto

跳到指定行执行

Copy
package main

import "fmt"

func main() {
if 1 == 1 {
goto a
}
fmt.Println("hello1")
fmt.Println("hello2")
fmt.Println("hello3")
fmt.Println("hello4")
fmt.Println("hello5")
fmt.Println("hello6")
fmt.Println("hello7")
a:
fmt.Println("hello8")
}

运行结果：

Copy
hello8

return

结束当前函数不继续执行

Copy
package main

import "fmt"

func main() {
for j := 1; j < 10; j++ {
if j == 7 {
return
}
fmt.Println(j)
}
fmt.Println("hello golang")
}

运行结果：

Copy
1
2
3
4
5
6