17370845950

Go语言for循环有哪些写法_Golang循环结构基础总结
Go语言仅提供for一种循环语句,通过统一设计实现所有循环逻辑;计数循环采用标准三段式:for i := 0; i

Go 语言中只有 for 一种循环语句,所有循环逻辑(包括 while、do-while、遍历)都靠它实现——不是语法糖少,而是设计上刻意统一。

怎么写计数循环:最常用但最容易写错作用域

标准三段式:for i := 0; i 。注意三点:

  • 初始化语句(i := 0)中声明的变量 i 作用域仅限该 for 块内,循环外访问会报 undefined: i
  • 条件判断在每次迭代执行;后置语句(i++)在循环体执行完才运行
  • 别写成 for i := 0, i ——Go 要求用分号 ; 分隔三部分,逗号是语法错误

怎么模拟 while 循环:省略初始化和后置,但不能省略分号

当循环次数不确定、只依赖状态变量时,用 for condition { ... }

  • 正确写法:n := 1;

    for n —— 初始化放外面,for 后只留条件
  • 错误写法:for n 却没提前声明 n → 编译失败:undefined: n
  • 绝对不能写 for true { ... } —— Go 不允许布尔字面量作条件,必须用 for { ... }

怎么安全遍历切片、map 和 channel:range 不是万能,副本陷阱很常见

for range 是最简洁的遍历方式,但行为因类型而异:

  • 遍历切片时,v 是元素副本:for _, v := range nums { v *= 2 } 不会改变原切片;要修改得用索引:nums[i] = v * 2
  • 遍历 map 时顺序不保证,且 kv 都是副本;想改值必须 m[k] = newV
  • 遍历 channel 时,for v := range ch 会在 ch 关闭后自动退出;若未关闭,会永久阻塞

怎么跳出多层嵌套:标签不是 goto,但 break label 很实用

嵌套循环中,break 默认只跳出最内层。需要跨层控制时:

  • 给外层 for 加标签:outer: for i := 0; i
  • 内层用 break outer 直接终止外层循环,不是跳转到某行,而是干净退出整个结构
  • 标签名后必须跟冒号,且不能换行;continue outer 也能跳到外层下一轮

真正难的不是写对语法,而是理解每种写法背后的作用域规则、求值时机和数据所有权——比如 range 返回的是副本还是引用,for { } 里忘了 break 就是死循环,这些细节一旦忽略,bug 往往藏得深、复现难。