Go 循环和控制结构
基本的 for
循环
for
循环是 Go 语言中唯一的循环结构,用法类似于 C 或 Java。它由三个部分组成,分别是初始化语句、条件表达式和后置语句。
初始化语句通常用于声明循环控制变量;条件表达式在每次迭代前求值,决定是否继续循环;后置语句在每次循环迭代后执行,通常用于更新循环变量。
for i := 0; i < 10; i++ {
fmt.Println(i)
}
while
风格的 for
循环
Go 语言没有独立的 while
关键字,但可以通过省略 for
循环的初始化语句和后置语句,实现类似 while
循环的效果。
此时,for
循环只有条件表达式,当条件为 true
时继续循环。
计数器 := 0
for 计数器 < 10 {
fmt.Println(计数器)
计数器++
}
无限循环
当省略 for
循环的所有部分时,将创建一个无限循环。没有条件表达式,循环将永远执行下去,必须使用 break
或 return
来退出循环。
for {
fmt.Println("无限循环")
break // 必须有退出条件来结束循环
}
for
循环与 range
range
关键字用于在 for
循环中遍历数组、切片、字符串、映射或通道。使用 range
可以同时获取索引(或键)和对应的值,简化集合的迭代。
数字列表 := []int{2, 4, 6, 8}
for 索引, 值 := range 数字列表 {
fmt.Printf("索引 %d,值 %d\n", 索引, 值)
}
使用 _
忽略返回值
如果在遍历时不需要索引或键,可以使用 _
来忽略。
数字列表 := []int{2, 4, 6, 8}
for _, 值 := range 数字列表 {
fmt.Println("值", 值)
}
循环控制语句 break
和 continue
break
用于立即退出循环,而 continue
则跳过当前循环的剩余代码,直接开始下一次迭代。
for i := 1; i <= 10; i++ {
if i%3 == 0 {
fmt.Println("跳过", i)
continue // 跳过当前迭代
}
if i == 8 {
fmt.Println("在", i, "处退出循环")
break // 退出循环
}
fmt.Println(i)
}
循环中变量的作用域
在 for
循环的初始化语句中声明的变量,其作用域仅限于循环内部,避免了变量污染外部作用域。
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// fmt.Println(i) // 这行代码将无法编译,因为 i 超出了作用域
注意事项
- 在使用无限循环时,一定要确保有合适的退出条件,以防止程序陷入死循环。
- 使用
range
遍历时,如果不需要索引或键,使用_
忽略可以提高代码可读性。 - 变量名应具备描述性,便于理解代码的作用。