Go-流程控制
在golang语言中有丰富的流程控制方面的功能。包括条件控制语句、循环语句、跳转语句等
1 if条件控制语句
1.1 语法
if condition {
statement(s)
} else if condition {
statement(s)
} else {
statement(s)
}
//1 其中condition 为一个条件表达式,用于判断真假,结果必须为true或false
//2 如果条件为真则执行condition后面{}中的代码,
//3 如果条件为假则依次执行else if 判断直到第一个为真的condition 出现后,执行其后面{}中的代码,
//4 如果所有的condition都为假,则执行else 后面{}中的代码
//5 如果没有else 块,则条件都为假时不执行任何语句,跳过此if条件语句执行下面的代码
1.2 示例
package main
import "fmt"
func main() {
if a := 2; a > 3 {
fmt.Println("1")
} else if a > 2 {
fmt.Println("2")
} else {
fmt.Println("3")
}
fmt.Println("4")
}
------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
3
4
PS C:\Goproject\src\gocode\project01\main>
2 switch 条件控制语句
2.1 语法
switch expression {
case value1,value2:
statement(s)
case value3,value4:
satatement(s)
...
default:
statement(s)
}
//1 expression是一个表达式,用于匹配case子句中的常量或变量。
//2 如果匹配成功,则执行对应的代码
//3 否则跳过该语句,匹配下一个case子句
//4 如果所有的case子句都未匹配成功,则执行default 后面的代码
//5 如果没有default子句,且都没有匹配,则不执行任何语句,跳过此switch条件语句
2.2 示例
package main
import "fmt"
func main() {
var grade int = 43
switch grade / 10 {
case 10:
fmt.Println("A")
case 9, 8:
fmt.Println("B")
case 7, 6:
fmt.Println("C")
default:
fmt.Println("D")
}
}
-------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
D
PS C:\Goproject\src\gocode\project01\main>
2.3 switch使用注意
- expresstion 是一个表达式(常量值、变量、一个有返回值的函数都可以)
- case后的value值不能重复
- case后的各个值的数据类型,必须和switch的表达式返回的数据类型一致
- case后面可以带多个值,使用英文逗号分隔
- default子句不是必须的,位置也是随意的
- switch穿透,利用fallthrough关键字,如果在case语句块后面增加fallthrough,则会继续执行下一个case的代码,也叫switch穿透
switch穿透示例
package main
import "fmt"
func main() {
var grade int = 83
switch grade / 10 {
case 10:
fmt.Println("A")
case 9, 8:
fmt.Println("B")
fallthrough
case 7, 6:
fmt.Println("C")
default:
fmt.Println("D")
}
}
-----------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
B
C
PS C:\Goproject\src\gocode\project01\main>
3 for循环语句
3.1 语法
3.1.1 形式一
for init ; condition ; post {
statement(s)
}
//1 init 用于初始化循环变量,从何时开始循环
//2 condition 用于条件判断循环是否继续
//3 post 用于控制循环变量的操作,首次循环不操作,然后先操作再判断
//4 statement(s) 循环体代码
3.1.2 形式二--类似于while
for condition {
statement(s)
}
//1 condition 用于条件判断循环是否继续,满足条件即执行循环体
//2 statement(s) 循环体代码
3.2 示例
package main
import "fmt"
func main() {
var x int = 5
var y int = 0
for i := 0; i < x; i++ {
fmt.Println(i)
}
fmt.Println("------------------")
i := 0
for i < x {
fmt.Println(i)
i++
}
fmt.Println("------------------")
for y < x {
y++
fmt.Println(y)
}
}
--------------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
0
1
2
3
4
------------------
0
1
2
3
4
------------------
1
2
3
4
5
PS C:\Goproject\src\gocode\project01\main>
3.3 range语句
range语句用于遍历数组、切片、通道或映射元素
3.3.1 语法
for key,value := range Map {
statement(key)
statement(value)
}
//1 其中的key和value分别表示Map元素中的键和值
3.3.2 示例
package main
import "fmt"
func main() {
nums := []int{2, 3, 4}
sum := 0
for _, num := range nums {
sum += num
}
fmt.Println("sum:", sum)
for i, num := range nums {
if num == 3 {
fmt.Println("index:", i)
}
}
kvs := map[string]string{"name": "du-z", "age": "25"}
for k, v := range kvs {
fmt.Printf("%s -> %s", k, v)
fmt.Printf(" ")
}
}
---------------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
sum: 9
index: 1
name -> du-z age -> 25
PS C:\Goproject\src\gocode\project01\main>
4 跳转语句
4.1 break语句
break语句用于中断循环体
4.2 continue语句
continue语句用于中断本次迭代
4.3 示例
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if i == 3 {
break
}
fmt.Printf("%d ", i)
}
fmt.Println()
for i := 0; i < 5; i++ {
if i == 3 {
continue
}
fmt.Printf("%d ", i)
}
}
-------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
0 1 2
0 1 2 4
PS C:\Goproject\src\gocode\project01\main>
5 goto语句无条件流程控制语句
Golang中的goto语句是一种强大的无条件控制流程语句,它允许程序跳转到指定的标签位置并执行语句
5.1 语法
goto labelname
labelname:
statement(s)
//1 labelname 是一个标识符
//2 statement(s) 是要执行的语句
5.2 goto语句使用注意事项
- 避免滥用--由于goto语句可以使程序跳转到任意代码部分,滥用会导致程序变得难以理解和维护,应该尽量用结构化语句
- 避免无线循环--如果标签的位置没有改变循环条件,那么程序就会无线循环,且很难发现和修复
5.3 示例
package main
import "fmt"
func main() {
i := 0
loop:
if i < 5 {
fmt.Printf("%d", i)
i++
goto loop
}
}
--------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
01234
PS C:\Goproject\src\gocode\project01\main>
6 经典例子---打印九九乘法表
package main
import "fmt"
func main() {
num := 9
for i := 1; i <= num; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%v * %v = %v \t", j, i, j*i)
}
fmt.Println()
}
}
----------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
PS C:\Goproject\src\gocode\project01\main>