1 循环语句概述
在 Go 语言中,循环语句允许我们多次执行一个代码块。当你需要重复执行某些操作时,循环语句就变得非常有用。例如,你可能想要遍历数组中的每个元素,或者重复执行某项操作直到满足特定条件为止。在 Go 中,循环语句主要通过 for
关键字实现,它是 Go 语言中唯一的循环语句。正确使用循环语句对于编写高效且易于维护的代码至关重要。
2 for
循环基础
2.1 for
循环的构成
Go 语言的 for
循环有三个组成部分:
- 初始化语句:在第一次迭代前执行,通常用于声明循环计数器。
-
条件表达式:在每次迭代前求值。如果条件为
true
,则继续执行循环体。 - 后续操作:在每次迭代的代码块执行完毕后执行,通常用于更新循环计数器。
for
循环的语法如下所示:
for 初始化语句; 条件表达式; 后续操作 {
// 循环体代码
}
2.2 简单 for
循环实例
让我们通过一个简单的例子理解 for
循环的执行过程:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println("i的值是:", i)
}
}
在这个例子中,变量 i
被初始化为 0
。for
循环检查 i < 5
条件是否为真。如果条件为真,执行循环体并打印 i
的值。执行完循环体后,i
的值通过 i++
(递增操作)更新,然后循环重新检查条件,直到 i
的值到达 5
时,条件变为假,并且 for
循环终止。
2.3. 其他for
循环实例
Go语言的for
循环非常灵活,可以有多种不同形式的写法来应对不同的场景。
2.3.1 无条件循环
在Go中,你可以省略for
循环的初始化语句、条件表达式以及后续操作,这会创建一个无限循环,它将一直运行直到被break
语句终止或者是返回函数值。
for {
// 无限循环中的代码
if someCondition {
break // 当满足某个条件时退出循环
}
}
2.3.2 只有条件的循环
在Go里,你也可以使用只包含条件的for
循环,类似于其他编程语言中的while
循环。
n := 0
for n < 5 {
fmt.Println(n)
n++
}
上面的代码会打印``到4
,在n
达到5
时循环结束。
2.3.3 循环遍历数组或切片
Go语言使用范围(range)关键字来更简单地遍历数组或切片中的每个元素。
items := []int{1, 2, 3, 4, 5}
for index, value := range items {
fmt.Printf("索引:%d, 值:%d\n", index, value)
}
上面的代码会打印每个元素的索引和值。如果你只需要元素的值,可以通过使用_
来忽略索引。
for _, value := range items {
fmt.Printf("值:%d\n", value)
}
说明:在后续章节会详细讲解数组的用法,这里看不明白不要紧,只要了解
for
循环可以这么使用即可。
2.3.4 循环遍历映射(maps)
遍历映射时,for
循环与range
表达式一起使用就显得非常有力。这允许你获取映射的每个键值对。
colors := map[string]string{"red": "#ff000", "green": "#00ff00", "blue": "#000ff"}
for key, value := range colors {
fmt.Printf("键:%s, 值:%s\n", key, value)
}
在这个例子中,我们打印出了映射colors
中所有的键和对应的值。如同在遍历切片时一样,如果只需要键或值,您可以选择忽略另一个值。
说明:在后续章节会详细讲解maps的用法,这里看不明白不要紧,只要了解
for
循环可以这么使用即可。
3 控制循环流程
3.1 使用 break
结束循环
有时候我们需要在满足特定条件时提前退出循环,这时可以使用 break
语句。下面是一个使用 break
退出循环的例子:
package main
import "fmt"
func main() {
for i := ; i < 10; i++ {
if i == 5 {
break // 当 i 等于 5 时退出循环
}
fmt.Println("i的值是:", i)
}
// 输出将只包含从 到 4 的值
}
3.2 使用 continue
跳过迭代
在某些情况下,我们可能只想跳过当前的迭代,并继续执行循环中的下一次迭代。这可以通过 continue
语句实现。这里有一个例子:
package main
import "fmt"
func main() {
for i := ; i < 10; i++ {
if i%2 != 0 {
continue // 如果 i 是奇数,跳过此次迭代
}
fmt.Println("偶数:", i)
}
}