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