如何编写Golang循环语句for_Golang for循环使用说明

Go语言仅提供for一种循环语句,包含三段式、条件式和无限循环式三种形式;三段式for语法为“for 初始化; 条件表达式; 后置操作 { ... }”,初始化执行一次,条件在每次循环前判断,后置操作在循环体后执行。

Go语言中只有for一种循环语句,没有whiledo-while,但通过灵活写法可以实现所有循环逻辑。核心在于理解它的三种形式:传统三段式、条件式、无限循环式。

传统for循环(带初始化、条件、后置操作)

这是最接近其他语言for的写法,常用于已知迭代次数的场景,比如遍历数组索引或计数。

语法结构:
for 初始化; 条件表达式; 后置操作 { ... }

说明:
- 初始化只执行一次,通常声明并赋值循环变量
- 每次循环开始前判断条件,为false则退出;
- 后置操作在每次循环体执行完后运行,常用于递增/递减。

示例:

for i := 0; i < 5; i++ {
fmt.Println(i)
}

注意:
- 变量i作用域仅限于该for块内;
- 不支持逗号分隔多个初始化或后置语句(如i,j := 0,0需提前声明);
- 条件部分不能加括号,写成for (i 会报错。

条件型for循环(类似while)

省略初始化和后置操作,只保留条件表达式,适合依赖外部状态或复杂退出条件的场景。

语法:
for 条件 { ... }

常见用法:
- 模拟while (condition)逻辑;
- 配合breakreturn提前退出;
- 处理IO读取、状态轮询等不确定次数的操作。

示例:

sum := 0
n := 1
for sum < 100 {
sum += n
n++
}

无限循环(for {})与手动控制

省略全部三个部分,构成死循环,必须靠breakreturnos.Exit()等显式跳出,否则程序卡住。

适用场景:
- 服务器主循环(如HTTP服务监听);
- 游戏主帧循环;
- 需要持续监听信号或通道的后台协程。

示例:

for {
select {
case msg := <-ch:
handle(msg)
case <-done:
return
}
}

提示:
- 别忘了在循环体内提供退出路径,否则编译虽通过,运行会阻塞;
- 配合select使用时,default分支可避免阻塞,实现非阻塞轮询。

range关键字:专用于遍历集合

for ... range是Go特有语法,用于安全、简洁地遍历数组、切片、字符串、map、channel。它自动处理边界和类型,比手动索引更推荐。

基本形式:
for key, value := range collection { ... }

要点:
- map遍历时key/value顺序不保证;
- 切片/数组遍历时key是索引,value是元素副本(修改value不影响原数据);
- 如果不需要某个值,用下划线_忽略,避免编译错误(如for _, v := range s);
- 字符串按rune遍历(支持Unicode),不是字节。

示例:

nums := []int{10, 20, 30}
for i, v := range nums {
fmt.Printf("index %d: %d\n", i, v)
}

基本上就这些。Go的for看似简单,但把“少即是多”体现得很彻底——掌握这几种写法,就能覆盖全部循环需求,还不容易出错。