Go Tour 的 Flow Control 章节里,有一个叫“For continued”的小练习,代码短得可怜,但背后藏着不少值得琢磨的细节。咱们先看看这段代码到底在干什么,以及它为什么能输出 1024。

Go Tour 练习解析:理解 for 循环中的幂次增长逻辑

直接上代码:

package main

import "fmt"

func main() {
    sum := 1
    for ; sum < 1000; {
        sum += sum
    }
    fmt.Println(sum)
}

这个 for 循环省略了初始化语句和后置语句,只保留了条件判断 sum < 1000,看起来很像其他语言里的 while 循环。Go 对 C 风格的 for 做了精简,三个部分都可以省略,这是其中之一。

循环体里只有一句 sum += sum。换句话说,每次循环都把 sum 翻倍。等价于 sum = sum * 2。所以 sum 不是线性增长,而是指数级翻倍:

需要特别注意的是,循环条件是在每次迭代开始前检查的。所以当 sum 变成 1024 后,不会再进入循环体,而是直接退出并打印结果。这也解释了为什么最终输出是 1024 而不是 2048。

整个过程中没有用到 i++ 或传统计数器,却清晰地展示了 Go 对 C 风格 for 的精简支持。三个部分均可省略,比如 for { } 就是无限循环。这种写法让开发者更专注于逻辑本身,而不是循环的机械结构。

总结一下核心点:

本文转载于:https://www.php.cn/faq/2342934.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。