跳到主要内容

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 循环的所有部分时,将创建一个无限循环。没有条件表达式,循环将永远执行下去,必须使用 breakreturn 来退出循环。

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("值",)
}

循环控制语句 breakcontinue

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 遍历时,如果不需要索引或键,使用 _ 忽略可以提高代码可读性。
  • 变量名应具备描述性,便于理解代码的作用。