🚀本系列文章为个人学习笔记,目的是巩固知识并记录我的学习过程及理解。文笔和排版可能拙劣,望见谅。
1. 简介
Go 语言提供了多种控制结构,包括条件语句和循环结构,用于控制代码的执行流程。本文将详细介绍 Go 语言中的条件语句和循环结构,并结合示例代码展示其使用方法。
2. 条件语句
2.1 if 语句
if
语句用于根据条件表达式的结果(true 或 false)执行代码块。
if condition {
// 条件为 true 时执行
}
示例:
x := 10
if x > 5 {
fmt.Println("x 大于 5")
}
2.2 if-else 语句
if-else
语句在条件表达式为 false 时执行另一个代码块。
if condition {
// 条件为 true 时执行
} else {
// 条件为 false 时执行
}
示例:
y := 3
if y > 5 {
fmt.Println("y 大于 5")
} else {
fmt.Println("y 不大于 5")
}
2.3 嵌套的 if 语句
if
语句可以嵌套在其他的 if
或 else
语句中。
if condition1 {
if condition2 {
// 条件1和条件2均为 true 时执行
}
}
示例:
z := 10
if z > 5 {
if z < 15 {
fmt.Println("z 在 5 和 15 之间")
}
}
2.4 带有简短语句的 if
if
语句中可以包含一个简短的语句,该语句在条件判断之前执行。
if v := computeValue(); v < threshold {
// v 在整个 if 语句块中可用
}
示例:
if num := 10; num%2 == 0 {
fmt.Println(num, "是偶数")
}
2.5 switch 语句
switch
语句用于多条件分支选择,比多个 if-else
语句更简洁。
2.5.1 简单 switch 语句
switch value {
case case1:
// 当 value == case1 时执行
case case2:
// 当 value == case2 时执行
default:
// 当没有匹配的 case 时执行
}
示例:
day := "Monday"
switch day {
case "Monday":
fmt.Println("今天是星期一")
case "Tuesday":
fmt.Println("今天是星期二")
default:
fmt.Println("今天不是星期一或星期二")
}
2.5.2 带表达式的 switch
switch
后可以跟一个表达式,所有 case
语句中的表达式与其比较。
switch expr {
case expr1:
// 当 expr == expr1 时执行
case expr2:
// 当 expr == expr2 时执行
}
示例:
num := 5
switch {
case num < 0:
fmt.Println("负数")
case num == 0:
fmt.Println("零")
default:
fmt.Println("正数")
}
2.5.3 没有表达式的 switch
没有表达式的 switch
等同于 switch true
,常用于代替多个 if-else
。
示例:
age := 20
switch {
case age < 18:
fmt.Println("未成年人")
case age >= 18 && age < 60:
fmt.Println("成年人")
default:
fmt.Println("老年人")
}
2.5.4 fallthrough 语句
fallthrough
用于强制执行下一个 case
代码块,不论条件是否匹配。
示例:
num := 1
switch num {
case 1:
fmt.Println("一")
fallthrough
case 2:
fmt.Println("二")
}
输出:
一
二
2.5.5 类型 switch
类型 switch
用于根据接口类型的具体类型分支执行。
示例:
var x interface{} = 3.14
switch x.(type) {
case int:
fmt.Println("x 是 int 类型")
case float64:
fmt.Println("x 是 float64 类型")
default:
fmt.Println("未知类型")
}
3. 循环结构
3.1 for 循环
Go 语言中唯一的循环结构是 for
循环,可以用来实现各种循环。
3.1.1 基本形式
for
循环的基本形式由三个部分组成:初始化语句、条件表达式和后置语句。
for initialization; condition; post {
// 循环体
}
示例:
for i := 0; i < 10; i++ {
fmt.Println(i)
}
3.1.2 省略初始语句和后置语句
可以省略初始语句和后置语句,使用更灵活的控制。
i := 0
for i < 10 {
fmt.Println(i)
i++
}
3.1.3 省略条件表达式
省略条件表达式时,for
循环变为无限循环,需配合 break
语句使用。
for {
// 无限循环
break // 必须有跳出循环的条件
}
示例:
for {
fmt.Println("无限循环")
break
}
3.2 for-range 循环
for-range
循环用于迭代数组、切片、字符串、映射和通道。
3.2.1 遍历数组和切片
nums := []int{1, 2, 3}
for index, value := range nums {
fmt.Println(index, value)
}
3.2.2 遍历字符串
str := "Hello"
for index, char := range str {
fmt.Printf("%d:%c\n", index, char)
}
3.2.3 遍历映射
在 Go 中,for-range
语句可以用于遍历映射(map),获取键和值。
m := map[string]int{"one": 1, "two": 2, "three": 3}
for key, value := range m {
fmt.Println(key, value)
}
在此示例中,每次迭代中 key
和 value
分别表示映射的键和值。
3.2.4 遍历通道
可以使用 for-range
语句遍历从通道(channel)接收的值,直到通道关闭。
ch := make(chan int, 5)
go func() {
for i := 0; i < 5; i++ {
ch <- i
}
close(ch)
}()
for value := range ch {
fmt.Println(value)
}
在此示例中,循环遍历通道 ch
中的所有值,直到通道被关闭。
3.3 循环控制
3.3.1 break 语句
break
语句用于提前终止循环。
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
当 i
等于 5 时,循环终止。
3.3.2 continue 语句
continue
语句用于跳过当前循环的剩余部分,继续下一次迭代。
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
该示例只打印奇数,因为 continue
跳过了偶数的迭代。
3.3.3 goto 语句
goto
语句用于跳转到同一函数内的指定标签(label)。
for i := 0; i < 10; i++ {
if i == 5 {
goto end
}
fmt.Println(i)
}
end:
fmt.Println("循环终止")
当 i
等于 5 时,程序跳转到 end
标签处执行。
4. 示例代码
在这一部分,提供一系列代码示例,演示如何使用 Go 语言中的条件语句和循环结构。包括常见用例,如遍历数据结构、条件判断等。
package main
import "fmt"
func main() {
// if-else 语句示例
num := 10
if num > 0 {
fmt.Println("正数")
} else {
fmt.Println("负数或零")
}
// switch 语句示例
day := "Monday"
switch day {
case "Monday":
fmt.Println("今天是星期一")
case "Tuesday":
fmt.Println("今天是星期二")
default:
fmt.Println("今天不是星期一或星期二")
}
// for 循环示例
for i := 0; i < 3; i++ {
fmt.Println(i)
}
// for-range 遍历切片
fruits := []string{"apple", "banana", "cherry"}
for index, fruit := range fruits {
fmt.Printf("%d: %s\n", index, fruit)
}
// break 语句示例
for i := 0; i < 5; i++ {
if i == 3 {
break
}
fmt.Println(i)
}
// continue 语句示例
for i := 0; i < 5; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
// goto 语句示例
for i := 0; i < 5; i++ {
if i == 2 {
goto label
}
fmt.Println(i)
}
label:
fmt.Println("跳转到标签处")
}
5. 总结
本文详细介绍了 Go 语言中的条件语句(if, if-else, switch)和循环结构(for, for-range),包括如何使用 break
、continue
和 goto
控制循环的流程。通过示例代码展示了这些控制结构的实际应用。掌握这些基本语法结构对于编写高效和可维护的 Go 代码至关重要。