第4章:流程控制
在编程中,流程控制语句是控制程序执行顺序的关键工具。它们允许我们根据不同的条件执行不同的代码块,从而实现复杂的逻辑。Go语言提供了多种流程控制语句,包括条件语句(if
、switch
)和循环语句(for
、range
)。本章将详细介绍这些流程控制语句的使用方法和注意事项。
一、条件语句
(一)if
语句
if
语句是最基本的条件语句,用于根据条件表达式的值决定是否执行某个代码块。在Go语言中,if
语句的语法如下:
go
if 条件表达式 {
// 逻辑代码
}
1. 单分支if
单分支if
语句只有在条件表达式为true
时才会执行代码块。例如:
go
package main
import "fmt"
func main() {
var count int = 20
if count < 30 {
fmt.Println("库存不足")
}
}
在这个例子中,如果count
小于30,程序会输出"库存不足"。
2. 双分支if
双分支if
语句在条件表达式为true
时执行一个代码块,否则执行另一个代码块。语法如下:
go
if 条件表达式 {
// 逻辑代码1
} else {
// 逻辑代码2
}
例如:
go
package main
import "fmt"
func main() {
var count int = 70
if count < 30 {
fmt.Println("库存不足")
} else {
fmt.Println("库存充足")
}
}
在这个例子中,如果count
小于30,程序会输出"库存不足",否则输出"库存充足"。
3. 多分支if
多分支if
语句通过多个else if
子句来处理多个条件。语法如下:
go
if 条件表达式1 {
// 逻辑代码1
} else if 条件表达式2 {
// 逻辑代码2
} else {
// 逻辑代码n
}
例如:
go
package main
import "fmt"
func main() {
var score int = 85
if score >= 90 {
fmt.Println("您的成绩为A级别")
} else if score >= 80 {
fmt.Println("您的成绩为B级别")
} else if score >= 70 {
fmt.Println("您的成绩为C级别")
} else if score >= 60 {
fmt.Println("您的成绩为D级别")
} else {
fmt.Println("您的成绩为E级别")
}
}
在这个例子中,程序会根据score
的值输出相应的成绩级别。
(二)switch
语句
switch
语句用于根据不同的值选择执行不同的代码块。它比多个if
语句更简洁,也更容易阅读。switch
语句的语法如下:
go
switch 表达式 {
case 值1:
// 语句块1
case 值2:
// 语句块2
...
default:
// 默认语句块
}
1. 基本用法
例如:
go
package main
import "fmt"
func main() {
var score int = 85
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级")
default:
fmt.Println("您的等级为E级")
}
}
在这个例子中,程序会根据score
的值输出相应的成绩级别。
2. 特殊用法
- 省略表达式 :
switch
语句可以不带表达式,直接作为if
语句的替代品。
go
package main
import "fmt"
func main() {
var score int = 85
switch {
case score >= 90:
fmt.Println("您的成绩为A级别")
case score >= 80:
fmt.Println("您的成绩为B级别")
case score >= 70:
fmt.Println("您的成绩为C级别")
case score >= 60:
fmt.Println("您的成绩为D级别")
default:
fmt.Println("您的成绩为E级别")
}
}
fallthrough
关键字 :fallthrough
关键字可以用来实现switch
语句的穿透,即执行完当前case
后继续执行下一个case
。
go
package main
import "fmt"
func main() {
var score int = 85
switch score / 10 {
case 10:
fmt.Println("您的等级为A级")
fallthrough
case 9:
fmt.Println("您的等级为A级")
fallthrough
case 8:
fmt.Println("您的等级为B级")
}
}
二、循环语句
(一)for
循环
for
循环是Go语言中最基本的循环语句,用于重复执行某个代码块。for
循环的语法如下:
go
for 初始表达式; 布尔表达式; 迭代因子 {
// 循环体
}
1. 基本用法
例如:
go
package main
import "fmt"
func main() {
sum := 0
for i := 1; i <= 5; i++ {
sum += i
}
fmt.Println("1到5的和为:", sum)
}
在这个例子中,程序会计算1到5的和,并输出结果。
2. 无限循环
如果省略for
循环的条件表达式,可以创建一个无限循环。例如:
go
package main
import "fmt"
func main() {
for {
fmt.Println("这是一个无限循环")
break // 使用break语句退出循环
}
}
3. 灵活的for
循环
for
循环的初始表达式和迭代因子可以省略,使其更加灵活。例如:
go
package main
import "fmt"
func main() {
i := 1
for i <= 5 {
fmt.Println(i)
i++
}
}
(二)for-range
循环
for-range
循环是Go语言中用于遍历集合(如数组、切片、字符串、映射等)的专用循环语句。语法如下:
go
for key, value := range collection {
// 循环体
}
1. 遍历数组和切片
例如:
go
package main
import "fmt"
func main() {
arr := [5]int{1, 2, 3, 4, 5}
for index, value := range arr {
fmt.Printf("索引:%d, 值:%d\n", index, value)
}
}
2. 遍历字符串
例如:
go
package main
import "fmt"
func main() {
str := "hello, Golang!"
for index, runeValue := range str {
fmt.Printf("索引:%d, 字符:%c\n", index, runeValue)
}
}
3. 遍历映射
例如:
go
package main
import "fmt"
func main() {
m := map[string]int{"a": 1, "b": 2, "c": 3}
for key, value := range m {
fmt.Printf("键:%s, 值:%d\n", key, value)
}
}
三、循环控制语句
(一)break
语句
break
语句用于终止循环的执行。例如:
go
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
}
在这个例子中,当i
等于5时,循环会终止。
(二)continue
语句
continue
语句用于跳过当前循环的剩余部分,直接进入下一次迭代。例如:
go
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i