在Golang中迭代数据结构

Gorange教程展示了如何在Golang中迭代数据结构。

Goforrange形式可用于迭代字符串、数组、切片、映射和通道。

$ go version
go version go1.18.1 linux/amd64

我们使用Go版本1.18。

Go范围数组

以下示例使用range遍历Go数组。

package main

import "fmt"

func main() {
    
    vals := [...]int{5, 4, 3, 2, 1}

    for idx, e := range vals {

        fmt.Println("element", e, "at index", idx)
    }
}

我们迭代一个整数值数组。

$ go run array_range.go 
element 5 at index 0
element 4 at index 1
element 3 at index 2
element 2 at index 3
element 1 at index 4
package main

import "fmt"

func main() {
    
    vals := [...]int{5, 4, 3, 2, 1}

    for _, e := range vals {

        fmt.Printf("%d ", e)
    }

    fmt.Println("\n******************")

    for idx, _ := range vals {

        fmt.Printf("%d ", idx)
    }

    fmt.Println("\n******************")

    for idx := range vals {

        fmt.Printf("%d -> %d\n", idx, vals[idx])
    }
}

此示例表明可以使用_跳过迭代中的索引或元素。

for idx := range vals {

    fmt.Printf("%d -> %d\n", idx, vals[idx])
}

在这种形式中,我们迭代索引。

围棋范围图

以下示例使用range遍历Go映射。

package main

import "fmt"

func main() {
    
    data := map[string]string{

        "de": "Germany", 
        "it": "Italy",
        "sk": "Slovakia",
    } 

    for k, v := range data {

        fmt.Println(k, "=>", v)
    }

    fmt.Println("----------------------")

    for k := range data {

        fmt.Println(k, "=>", data[k])
    }
}

该示例遍历一系列国家/地区地图,其中键和值是字符串。

$ go run map_range.go 
de => Germany
it => Italy
sk => Slovakia
----------------------
de => Germany
it => Italy
sk => Slovakia

Go范围字符串

以下示例使用range遍历Go字符串。

package main

import "fmt"

func main() {
    
    s := "合気道"

    for idx, e := range s {

        fmt.Printf("%d %c\n", idx, e)
    }

    fmt.Println()
}

在代码示例中,我们迭代了Go符文。

$ go run string_range.go 
0 合
3 気
6 道

这是输出。每个符文都有三个字节。

Go范围通道

以下示例使用range遍历Go通道。通道是pipe,goroutines通过它进行通信;通信是无锁的。

package main

import "fmt"

func main() {
    
    ch := make(chan int)

    go func() {

        ch <- 5
        ch <- 6
        ch <- 7
        
        close(ch)
    }()

    for n := range ch {

        fmt.Println(n)
    }
}

在代码示例中,我们遍历通过通道发送的值。

$ go run channel_range.go 
5
6
7

在本教程中,我们介绍了Golang中的范围形式。

列出所有Go教程。

赞(0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏