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教程。