
本文详解 Go Tour 中“For continued”练习的执行过程,揭示 sum += sum 如何等价于乘以 2 的幂运算,并说明为何最终输出为 1024。
本文详解 go tour 中“for continued”练习的执行过程,揭示 `sum += sum` 如何等价于乘以 2 的幂运算,并说明为何最终输出为 1024。
在 Go Tour 的 Flow Control → For continued 练习中,给出了如下简洁但富有启发性的代码:
package main
import "fmt"
func main() {
sum := 1
for ; sum < 1000; {
sum += sum
}
fmt.Println(sum)
}这段代码看似简单,却精准体现了 Go 中 for 循环的灵活性——它省略了初始化语句和后置语句,仅保留条件判断,形成类似 while 的结构。其等价逻辑可重写为:
sum := 1
for sum < 1000 {
sum += sum // 即 sum = sum * 2
}每次循环,sum 都翻倍:
- 初始:sum = 1
- 第1次:sum = 1 + 1 = 2
- 第2次:sum = 2 + 2 = 4
- 第3次:sum = 4 + 4 = 8
- ……
- 第9次后:sum = 512(仍满足 512
- 第10次:sum = 512 + 512 = 1024
- 此时 1024
因此,该循环实际在计算不小于 1000 的最小 2 的幂(即 $2^{10} = 1024$)。注意:循环在 sum 首次 ≥ 1000 时退出,故结果不是“最接近 1000 的值”,而是“首次超过或等于 1000 的 2 的幂”。
? 小贴士:
- sum += sum 是 sum *= 2 的等价写法,但前者更强调“自加”语义,在教学中有助于理解变量累积过程;
- 若需严格控制迭代次数,建议显式使用 for i := 0; i
- 此类无初始化/后置语句的 for 形式在需要复杂条件判断或状态驱动循环时非常实用(如读取流、轮询状态等)。
掌握这种“纯条件型 for”的用法,是深入理解 Go 控制流简洁性与表达力的关键一步。


















