Golang的循环逻辑统一使用for关键字实现,没有其他语言中的while、do-while结构,看似单一实则可以覆盖所有循环场景。下面我们就来详细了解for的语法和各种常见写法。

基础语法形式
Golang的for循环基础语法包含三个可选部分,结构如下:
for 初始化语句; 条件表达式; 后置语句 {
// 循环体逻辑
}这三个部分都可以根据需求省略,不同的省略组合就形成了不同的循环写法。
常见写法一:计数循环
这是最常用的循环形式,类似其他语言的for循环,适合已知循环次数的场景:
package main
import "fmt"
func main() {
// 循环打印1到5的数字
for i := 1; i <= 5; i++ {
fmt.Println(i)
}
}初始化语句定义循环变量i,条件表达式判断i是否小于等于5,每次循环后执行i++更新变量值,当条件不满足时循环结束。
常见写法二:条件循环(类似while)
省略初始化和后置语句,只保留条件表达式,就可以实现类似其他语言while的循环效果:
package main
import "fmt"
func main() {
i := 1
// 只保留条件表达式,类似while循环
for i <= 5 {
fmt.Println(i)
i++
}
}这种写法适合循环次数不确定,仅根据条件判断是否继续循环的场景。
常见写法三:无限循环
三个部分全部省略,就会形成无限循环,通常需要配合break语句在满足条件时退出循环:
package main
import "fmt"
func main() {
i := 1
// 无限循环,条件始终为true
for {
if i > 5 {
break // 满足条件时退出循环
}
fmt.Println(i)
i++
}
}无限循环常用于需要持续运行的场景,比如服务监听、定时任务等。
常见写法四:遍历集合(for-range)
Golang提供了for-range语法,可以快速遍历数组、切片、映射、字符串等集合类型,不需要手动维护索引:
package main
import "fmt"
func main() {
// 遍历切片
nums := []int{1, 2, 3, 4, 5}
for index, value := range nums {
fmt.Printf("索引:%d,值:%d\n", index, value)
}
// 遍历映射
user := map[string]string{"name": "张三", "age": "20"}
for key, val := range user {
fmt.Printf("键:%s,值:%s\n", key, val)
}
// 遍历字符串,得到的是字符的Unicode码点
str := "hello"
for i, c := range str {
fmt.Printf("索引:%d,字符:%c\n", i, c)
}
}遍历时可以根据需要只接收索引或只接收值,比如只需要值的话可以写成for _, value := range nums,忽略索引部分。
循环控制语句
在for循环中还可以配合break和continue控制循环流程:
- break:立即退出当前整个循环,后续循环体不再执行
- continue:跳过当前循环的剩余逻辑,直接进入下一次循环的条件判断
package main
import "fmt"
func main() {
for i := 1; i <= 5; i++ {
if i == 3 {
continue // 跳过i=3的情况,不打印3
}
if i == 5 {
break // i=5时退出循环,不执行后续逻辑
}
fmt.Println(i)
}
}上面代码的输出会是1、2、4,因为i=3时被跳过,i=5时循环直接退出。