
本文解析go tour中“for continued”练习题:通过无初始化和迭代语句的for循环,将变量sum从1开始不断自加(等价于乘2),直至不小于1000,最终输出1024的执行逻辑与数学本质。
本文解析go tour中“for continued”练习题:通过无初始化和迭代语句的for循环,将变量sum从1开始不断自加(等价于乘2),直至不小于1000,最终输出1024的执行逻辑与数学本质。
在Go语言中,for 循环具有高度灵活性,其语法结构为 for [init; condition; post] { ... },三部分均可省略。本例中的循环写法:
for ; sum < 1000; {
sum += sum
}等价于经典的while风格:“当条件成立时,重复执行循环体”。这里省略了初始化(init)和后置语句(post),仅保留条件判断 sum < 1000,而核心操作 sum += sum 在循环体内完成——该语句每次将 sum 翻倍(即 sum = sum * 2)。
我们来逐步追踪执行过程(初始 sum = 1):
| 循环轮次 | 条件判断(sum < 1000) | 执行 sum += sum 后 | sum 值 |
|---|---|---|---|
| 初始 | — | — | 1 |
| 第1次 | 1 < 1000 → true | 1 + 1 = 2 | 2 |
| 第2次 | 2 < 1000 → true | 2 + 2 = 4 | 4 |
| 第3次 | 4 < 1000 → true | 4 + 4 = 8 | 8 |
| … | … | … | … |
| 第9次 | 512 < 1000 → true | 512 + 512 = 1024 | 1024 |
| 第10次 | 1024 < 1000 → false | 循环终止 | — |
可见,sum 实际按 ^0, 2^1, 2^2, \dots, 2^9$ 的规律增长,即 ^9 = 512$ 仍满足条件,进入第10轮循环体,计算得 ^{10} = 1024$;此时 sum = 1024,再回到条件判断——1024 < 1000 为假,循环退出,最终输出 1024。
立即学习“go语言免费学习笔记(深入)”;
⚠️ 注意事项:
- sum += sum 是先计算、后赋值,不可误解为“加1”或“累加固定值”;
- 该循环依赖精确的边界条件:若将条件改为 sum <= 1000,结果仍是 1024(因1024 > 1000,不会再次进入);但若初始值或条件变化,可能引发无限循环(如 sum := 0; for ; sum < 1000; { sum += sum } 将永远卡在0);
- 此写法虽合法,但在工程实践中建议优先使用语义更清晰的形式(如 for sum < 1000 { sum *= 2 }),提升可读性与可维护性。
总结:本例精炼展示了Go中for循环的通用性与表达力——它不仅是传统C风格的计数循环,更是可灵活模拟while、do-while甚至递归展开的控制结构。理解其三段式省略规则与执行顺序,是掌握Go流程控制的关键基础。


















