ZetCode

Go for 循环

最后修改时间 2024 年 4 月 11 日

在本文中,我们将展示如何使用 for 语句在 Golang 中创建循环。Go 中有三种形式的 for 循环。

Go for 语句

for 语句指定块的重复执行。for 语句有三种形式:经典的 C 风格 for 语句、单条件 for 语句以及带 range 子句的 for 语句。

经典 C 风格 for 循环

下面的示例与经典的 C 风格 for 语句相似(但不完全等效)。

main.go
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 语句。

main.go
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 语句一起使用。

main.go
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 文档称其为空白标识符。)

在下一个示例中,我们使用索引值。

main.go
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 版本中,增加了一种允许遍历整数的新语法。

main.go
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

无限循环

在下一个示例中,我们创建一个无限循环。

main.go
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 循环。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Go 教程