Go for 循环
最后修改时间 2024 年 4 月 11 日
在本文中,我们将展示如何使用 for 语句在 Golang 中创建循环。Go 中有三种形式的 for 循环。
Go for 语句
for 语句指定块的重复执行。for 语句有三种形式:经典的 C 风格 for 语句、单条件 for 语句以及带 range 子句的 for 语句。
经典 C 风格 for 循环
下面的示例与经典的 C 风格 for 语句相似(但不完全等效)。
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
该程序计算 1..9 的值之和。
for i := 0; i < 10; i++ {
sum += i
}
for 语句包含三个部分:初始化、条件和增量。初始化部分仅执行一次。当条件为真时,for 语句的主体将被执行。如果条件返回 false,则 for 循环终止。在执行完块中的语句后,for 循环将切换到第三个部分,其中计数器将被递增。循环继续,直到条件不再为真。请注意,创建无限循环是可能的。
$ go run main.go 45
1..9 的值之和为 45。
单条件 for
我们可以在 Go 中定义单条件 for 语句。
package main
import "fmt"
func main() {
sum := 0
i := 9
for i > 0 {
sum += i
i--
}
fmt.Println(sum)
}
单条件 for 语句在功能上等同于 C 的 while 循环。我们对 9..1 的值进行求和。在此示例中,我们定义了 i 计数器变量。
$ go run main.go 45
使用 range 子句
下一个示例将 range 子句与 for 语句一起使用。
package main
import "fmt"
func main() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
sum := 0
for _, num := range nums {
sum += num
}
fmt.Println(sum)
}
我们计算整数值的和。
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
我们定义了一个值数组。
for _, num := range nums {
sum += num
}
我们使用 range 子句遍历数组。range 在每次迭代中返回索引和值。由于我们不使用索引,因此我们指定丢弃 _ 操作符。(Golang 文档称其为空白标识符。)
在下一个示例中,我们使用索引值。
package main
import "fmt"
func main() {
words := []string{"sky", "cup", "cloud", "news", "water"}
for idx, word := range words {
fmt.Printf("%s has index %d\n", word, idx)
}
}
我们遍历单词切片。我们打印单词及其索引。
$ go run main.go sky has index 0 cup has index 1 cloud has index 2 news has index 3 water has index 4
遍历整数
在 Go 1.22 版本中,增加了一种允许遍历整数的新语法。
package main
import "fmt"
func main() {
for i := range 5 {
fmt.Println(i)
}
for range 6 {
fmt.Println("falcon")
}
}
该示例打印值 0..5,并将单词 "falcon" 打印六次。
$ go run main.go 0 1 2 3 4 falcon falcon falcon falcon falcon falcon
无限循环
在下一个示例中,我们创建一个无限循环。
package main
import (
"fmt"
"math/rand"
)
func main() {
for {
r := rand.Intn(30)
fmt.Printf("%d ", r)
if r == 22 {
break
}
}
}
该示例在无限循环中打印 <0, 30) 范围内的随机值。当我们遇到值 22 时,我们使用 break 关键字终止循环。
来源
The Go Programming Language Specification
在本文中,我们介绍了 Golang 中的 for 循环。