ynn*_*ynn 7 go language-lawyer
Go 1.22 今天发布了。根据发行说明,
“For”循环现在的范围可以是整数。例如:
Run Code Online (Sandbox Code Playgroud)package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 has lift-off!") }详细信息请参阅规格。
我想了解详细信息,但似乎规范根本没有解释语法。
我添加了#language-lawyer标签,因为我想要严格的理解。
今天(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)