如何在 Go 1.22 中的 for-range 循环中迭代整数?

ynn*_*ynn 7 go language-lawyer

Go 1.22 今天发布了。根据发行说明

“For”循环现在的范围可以是整数。例如:

package main

import "fmt"

func main() {
    for i := range 10 {
        fmt.Println(10 - i)
    }
    fmt.Println("go1.22 has lift-off!")
}
Run Code Online (Sandbox Code Playgroud)

详细信息请参阅规格。

我想了解详细信息,但似乎规范根本没有解释语法。

我添加了#language-lawyer标签,因为我想要严格的理解。

ynn*_*ynn 5

今天(2024/02/08),该规范已更新至最新版本。

根据规范,唯一允许的语法是:

for i := range n {
    //...
}
Run Code Online (Sandbox Code Playgroud)
  • n是一个(可能是无类型的)整数表达式。

  • 它从0到迭代n - 1。(n是独家的。)

  • 如果n <= 0,则循环不迭代任何内容。

  • 只能指定一个循环变量。(for i, j := 10(自然)无效。)

  • 与 Python 不同,您不能指定步骤或以相反的顺序迭代。


例子:

操场

package main

import "fmt"

func main() {
    for i := range 5 {
        fmt.Println(i) //=> 0 1 2 3 4
    }

    var i int
    for i = range 1 + 2 {
        fmt.Println(i) //=> 0 1 2
    }

    for i := range 0 {
        fmt.Println(i) //compiles but not executed
    }

    for i := range -1 {
        fmt.Println(i) //compiles but not executed
    }
}
Run Code Online (Sandbox Code Playgroud)