参考资料:

​https://www.liwenzhou.com/posts/Go/04_basic/#autoid-0-1-1​

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。

Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

1、if else(分支结构)

1.1、if条件判断基本写法

Go语言中if条件判断的格式如下:

if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else{
分支3
}

当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3。 if判断中的else if和else都是可选的,可以根据实际需要进行选择。

Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行。

举个例子:

package main

import "fmt"

func main() {
score := 65
if score >= 90 {
fmt.Println("A")
} else if score > 75 {
fmt.Println("B")
} else {
fmt.Println("C") //返回C
}
fmt.Println(score) //有结果
}

1.2、if条件判断特殊写法

if条件判断还有一种特殊的写法,可以在 if 表达式之前添加一个执行语句,再根据变量值进行判断,举个例子:

package main

import "fmt"

func main() {
// 作用域 score变量此时只在if条件判断语句中生效
if score := 65; score >= 90 {
fmt.Println("A")
} else if score > 75 {
fmt.Println("B")
} else {
fmt.Println("C")
fmt.Println(score)
}
fmt.Println(score) //在这里是找不到score
}

思考:上下两种写法的区别在

if else代码示例

package main

import "fmt"

// if条件判断

func main() {
age := 19
if age > 18 {
fmt.Println("可以去澳门")
} else {
fmt.Println("回家")
}
fmt.Println(age)

//多个条件判断
if age > 35 {
fmt.Println("人到中年")
} else if age > 18 {
fmt.Println("青年")
} else {
fmt.Println("好好学习")
}
fmt.Println(age)

// 作用域 age变量此时只在if条件判断语句中生效
if age := 19; age > 18 { // 如果age > 18 就执行这个{}中的代码
fmt.Println("澳门首家线上开业")
} else { // 否则就执行这个{}中的代码
fmt.Println("写暑假作业")
}
//fmt.Println(age) //在这里是找不到age
}


2、for(循环结构)

Go 语言中的所有循环类型均可以使用for关键字来完成。

for循环的基本格式如下:

for 初始语句;条件表达式;结束语句{
循环体语句
}

条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。

func forDemo() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}

for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,例如:

func forDemo2() {
i := 0
for ; i < 10; i++ {
fmt.Println(i)
}
}

for循环的初始语句和结束语句都可以省略,例如:

func forDemo3() {
i := 0
for i < 10 {
fmt.Println(i)
i++
}
}

这种写法类似于其他编程语言中的while,在while后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。

2.1、无限循环

for {
循环体语句
}

for循环可以通过break、goto、return、panic语句强制退出循环。

2.1.1、break  跳出for循环

package main

import (
"fmt"
//"github.com/klauspost/compress/s2"
)

func main() {
//当i=5时就跳出for循环
for i := 0; 1 < 10; i++ {
if i == 5 {
break //跳出for循环
}
fmt.Println(i)
}
fmt.Println("over")
}
0
1
2
3
4
over

2.1.2、continue(继续下次循环)

package main

import (
"fmt"
)

func main() {
//当i=5时,跳过此次for循环(不执行for循环内部的打印语句),继续下一次循环
for i := 0; i < 7; i++ {
if i == 5 {
continue //继续下一次循环
}
fmt.Println(i)
}
//fmt.Println("over")

}
0
1
2
3
4
6

2.1.3、switch case

使用switch语句可方便地对大量的值进行条件判断。

package main

import "fmt"

//switch
//简化大量的判断
func main() {
// var n = 5
// if n == 1{
// fmt.Println("大拇指")
// }else if n==2{
// fmt.Println("食指")
// }else if n==3{
// fmt.Println("中指")
// }else if n==4{
// fmt.Println("无名指")
// }else if n==5{
// fmt.Println("小母指")
// }else {
// fmt.Println("无效的")
// }
n := 6
//switch简化上面的代码
switch n {
case 1:
fmt.Println("大拇指")
case 2:
fmt.Println("食指")
case 3:
fmt.Println("中指")
case 4:
fmt.Println("无名指")
case 5:
fmt.Println("小拇指")
default:
fmt.Println("无效的输入!")
}
}
无效的输入!