Golang中没有while和do-while循环,所有的循环逻辑都通过for关键字实现,而break和continue是控制循环流程的两个核心关键字,合理使用它们可以让循环逻辑更简洁高效。

Golang的for循环基础写法
Golang的for循环有三种常见形式,适配不同的使用场景:
1. 带初始化、条件、后置语句的for循环
这种形式和传统编程语言的for循环结构类似,适合已知循环次数的场景:
package main
import "fmt"
func main() {
// 初始化i为0,i小于5时执行循环,每次循环后i自增1
for i := 0; i < 5; i++ {
fmt.Println("当前i的值:", i)
}
}
2. 仅带条件判断的for循环
这种形式等价于其他语言的while循环,适合不确定循环次数、仅根据条件退出的场景:
package main
import "fmt"
func main() {
i := 0
// 仅判断条件,条件为true时持续执行循环
for i < 3 {
fmt.Println("i的值为:", i)
i++
}
}
3. 无限循环
省略所有表达式的for循环会进入无限循环,通常需要配合break关键字退出:
package main
import "fmt"
func main() {
i := 0
// 无限循环,没有条件判断
for {
if i >= 2 {
break // 满足条件时退出循环
}
fmt.Println("无限循环中的i:", i)
i++
}
}
break关键字的作用与使用
break的作用是立即终止当前所在的循环,跳出循环体执行后续代码,不管循环条件是否还满足。
基础使用场景
当我们需要在循环过程中满足某个条件就提前结束循环时,就可以使用break:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 3 {
fmt.Println("i等于3,提前退出循环")
break
}
fmt.Println("当前i:", i)
}
fmt.Println("循环结束后的逻辑")
}
上述代码执行后,只会输出i为0、1、2的情况,当i等于3时触发break,循环直接终止,后续i为4到9的循环逻辑不会执行。
嵌套循环中的break
需要注意的是,break默认只会终止它所在的最内层循环,不会影响外层循环:
package main
import "fmt"
func main() {
// 外层循环
for i := 0; i < 3; i++ {
fmt.Printf("外层循环i: %dn", i)
// 内层循环
for j := 0; j < 3; j++ {
if j == 1 {
fmt.Printf("内层循环j等于1,终止内层循环n")
break
}
fmt.Printf("内层循环j: %dn", j)
}
}
}
执行上述代码可以看到,内层循环每次j等于1时就会终止,但外层循环还是会正常执行完i为0、1、2的三次循环。
continue关键字的作用与使用
continue的作用是跳过当前循环体中剩余的代码,直接进入下一次循环的迭代,不会终止整个循环。
基础使用场景
当我们需要跳过循环中某些不符合要求的迭代,继续执行后续迭代时,适合使用continue:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
if i == 2 {
fmt.Println("跳过i等于2的迭代")
continue
}
fmt.Println("当前i:", i)
}
}
上述代码执行后,会输出i为0、1、3、4的情况,i等于2时触发continue,跳过该次循环的打印逻辑,直接进入i=3的下一次迭代。
continue在条件循环中的注意事项
在使用仅带条件判断的for循环时,需要注意continue的位置,避免跳过变量的更新逻辑导致死循环:
package main
import "fmt"
func main() {
i := 0
for i < 5 {
if i == 3 {
fmt.Println("跳过i等于3的迭代")
i++ // 注意这里需要先更新i,否则continue后会一直卡在i=3的条件
continue
}
fmt.Println("当前i:", i)
i++
}
}
如果上述代码中continue之前没有i++,那么i会一直保持3,循环条件始终满足,就会进入死循环。
break与continue的使用对比
我们可以通过下面的表格清晰看到两者的核心区别:
| 对比项 | break | continue |
|---|---|---|
| 作用 | 立即终止整个当前循环 | 跳过当前迭代,进入下一次循环 |
| 循环后续执行 | 循环完全结束,执行循环外代码 | 循环继续执行,直到条件不满足 |
| 适用场景 | 满足特定条件后不需要再执行循环 | 满足特定条件时跳过当前迭代逻辑 |
实际开发中的使用建议
- 在无限循环中必须使用break来设置退出条件,否则会导致程序一直占用资源。
- 嵌套循环中如果需要终止外层循环,可以给外层循环加标签,然后用
break 标签名的方式实现,例如:
package main
import "fmt"
func main() {
// 定义外层循环标签
outerLoop:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
fmt.Println("触发外层循环终止条件")
break outerLoop // 直接终止外层循环
}
fmt.Printf("i:%d, j:%dn", i, j)
}
}
}
- 使用continue时,要确保循环变量的更新逻辑不会被跳过,尤其是在没有后置语句的for循环中。
- 不要过度使用break和continue,过多的流程跳转会让代码可读性下降,简单的条件判断优先用if处理。