Skip to content

循环与迭代

在 Go 语言中,循环和迭代是通过 for 语句实现的。Go 语言只有一种循环结构,就是 for 循环,但它可以灵活地用来实现不同的循环和迭代行为。

Go 中的 for 循环

形式描述示例
标准循环使用初始条件、循环条件和后续操作。for i := 0; i < 5; i++ { fmt.Println(i) }
条件循环只有循环条件,初始条件和后续操作可以省略。i := 0; for i < 5 { fmt.Println(i); i++ }
无限循环只使用 for,没有条件,相当于无限循环。for { fmt.Println("infinite loop") }
迭代数组或切片通过 range 迭代数组或切片,返回索引和值。for i, v := range arr { fmt.Println(i, v) }
迭代字符串range 也可以用于字符串,返回索引和字符的 Unicode 代码点。for i, v := range str { fmt.Println(i, v) }
迭代映射通过 range 迭代映射,返回键和值。for k, v := range myMap { fmt.Println(k, v) }
迭代通道range 也用于通道,返回从通道接收到的值。for v := range ch { fmt.Println(v) }

各种循环形式的示例

1. 标准循环

go
package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println(i)  // 输出 0, 1, 2, 3, 4
    }
}

2. 条件循环

go
package main

import "fmt"

func main() {
    i := 0
    for i < 5 {
        fmt.Println(i)  // 输出 0, 1, 2, 3, 4
        i++
    }
}

3. 无限循环

go
package main

import "fmt"

func main() {
    for {
        fmt.Println("This is an infinite loop")  // 不断输出
    }
}

4. 迭代数组或切片

go
package main

import "fmt"

func main() {
    arr := []int{1, 2, 3, 4, 5}
    for i, v := range arr {
        fmt.Printf("Index: %d, Value: %d\n", i, v)
    }
}

5. 迭代字符串

go
package main

import "fmt"

func main() {
    str := "hello"
    for i, v := range str {
        fmt.Printf("Index: %d, Rune: %c\n", i, v)
    }
}

6. 迭代映射

go
package main

import "fmt"

func main() {
    myMap := map[string]int{
        "apple":  1,
        "banana": 2,
        "cherry": 3,
    }
    for k, v := range myMap {
        fmt.Printf("Key: %s, Value: %d\n", k, v)
    }
}

7. 迭代通道

go
package main

import "fmt"

func main() {
    ch := make(chan int, 3)
    ch <- 1
    ch <- 2
    ch <- 3
    close(ch)

    for v := range ch {
        fmt.Println(v)  // 输出 1, 2, 3
    }
}

关键点总结

  1. for 是唯一的循环结构,它既可以用来做传统的计数循环,也可以用来做条件循环或无限循环。
  2. range 关键字非常强大,可以用于数组、切片、映射、通道和字符串的迭代。
  3. 无限循环for 语句没有条件时会成为无限循环,常用于需要持续运行的场景(例如监听事件、处理任务等)。
  4. 迭代结构:对于数组、切片、映射等数据结构,使用 range 来简化迭代操作。

Go 的 for 循环非常灵活,几乎可以实现所有类型的迭代需求,具有简单且强大的控制结构。