Golangfor循环的几种写法

Golangfor循环的几种写法
最新回答
快乐暗恋我

2026-10-22 22:54:39

Go语言中的for循环是唯一的循环结构,但支持多种灵活写法,可根据不同场景选择合适的语法。以下是常见的几种写法及示例:

1. 传统三段式for循环(类似C语言)

适用场景:已知循环次数或需要明确初始化、条件判断和迭代的场景。语法:

for 初始化语句; 条件表达式; 后置操作 { // 循环体}

示例:

for i := 0; i < 5; i++ { fmt.Println(i) // 输出0到4}

说明:

  • i := 0:初始化语句,仅执行一次。
  • i < 5:条件表达式,每次循环前判断,若为false则退出循环。
  • i++:后置操作,每轮循环结束后执行。
2. 只有条件表达式的for循环(类似while)

适用场景:需要条件判断但无需初始化或后置操作的场景(如动态条件循环)。语法:

for 条件表达式 { // 循环体}

示例:

i := 0for i < 5 { fmt.Println(i) // 输出0到4 i++}

说明:

  • 省略了初始化和后置操作,行为等同于其他语言的while (i < 5)。
  • 需手动在循环体内更新条件变量(如i++),否则可能导致死循环。
3. 无限循环(死循环)

适用场景:需要持续运行的场景(如后台服务、事件监听)。语法:

for { // 循环体}

示例:

for { fmt.Println("持续运行...") time.Sleep(time.Second) // 模拟延迟}

说明:

  • 无条件表达式,循环会一直执行,需通过break、return或panic退出。
  • 常见于服务器程序或轮询任务。
4. 遍历集合的for range循环

适用场景:遍历数组、切片、字符串、映射(map)或通道(channel)。语法:

for 索引/键, 值 := range 集合 { // 循环体}

示例:

  • 遍历切片:s := []string{"a", "b", "c"}for i, v := range s { fmt.Println(i, v) // 输出索引和值(如0 a, 1 b, 2 c)}
  • 遍历映射:m := map[string]int{"a": 1, "b": 2}for k, v := range m { fmt.Println(k, v) // 输出键和值(顺序随机)}
  • 仅获取索引/键:for i := range s { /* 忽略值 */ }
  • 仅获取值:for _, v := range s { /* 忽略索引 */ }
5. 控制循环的跳转语句

适用场景:在循环内提前终止或跳过当前迭代。

  • break:终止整个for循环。
  • continue:跳过当前迭代,进入下一轮循环。

示例:

for i := 0; i < 10; i++ { if i == 3 { continue // 跳过i=3的迭代 } if i == 8 { break // 终止循环 } fmt.Println(i) // 输出0 1 2 4 5 6 7}关键注意事项
  • 变量作用域:初始化语句中的变量(如i := 0)仅在当前for循环内有效。
  • range返回值:遍历字符串时,range会按UTF-8编码返回字符的索引和值;遍历映射时,键的顺序是随机的。
  • 死循环风险:无限循环需确保有退出条件(如break),否则程序会一直运行。
总结

Go语言的for循环通过灵活组合初始化、条件、后置操作和range关键字,覆盖了从固定次数循环到动态条件循环、从集合遍历到无限循环的所有场景。掌握这些写法后,可高效处理大多数循环需求。