Golang range 关键字
最后修改于 2025 年 5 月 7 日
本教程将介绍如何在 Go 中使用 range
关键字。我们将通过实际的集合遍历示例来涵盖迭代基础知识。
range
关键字提供对数组、切片、映射、字符串和通道的迭代。它为有序集合返回索引/值对。
在 Go 中,range
简化了处理集合时的循环语法。它自动处理迭代逻辑,使代码更简洁、更安全。
基本的切片 range 遍历
range
最简单的用法是遍历切片。此示例显示了如何访问索引和值。
basic_range.go
package main import "fmt" func main() { fruits := []string{"apple", "banana", "cherry"} for index, fruit := range fruits { fmt.Printf("Index: %d, Value: %s\n", index, fruit) } }
循环遍历切片,将索引分配给 index
,将值分配给 fruit
。Range 会自动处理迭代边界。
映射的 range 遍历
range
通过返回键/值对来处理映射。此示例演示了如何遍历映射的条目。
map_range.go
package main import "fmt" func main() { ages := map[string]int{ "Alice": 25, "Bob": 30, "Carol": 28, } for name, age := range ages { fmt.Printf("%s is %d years old\n", name, age) } }
映射的迭代顺序不保证。每次运行都可能产生不同的输出顺序。Range 简化了映射的遍历语法。
忽略索引或值
您可以使用 _
忽略索引或值。此示例展示了这两种情况。
ignore_range.go
package main import "fmt" func main() { numbers := []int{10, 20, 30, 40, 50} // Ignore index for _, value := range numbers { fmt.Println(value) } // Ignore value for index := range numbers { fmt.Println(index) } }
下划线 _
用于丢弃不需要的值。当您只需要对中的一部分时,这可以使代码更简洁。
字符串的 range 遍历
当对字符串进行 range 遍历时,Go 会迭代 Unicode 码点。此示例演示了字符迭代。
string_range.go
package main import "fmt" func main() { greeting := "Hello, 世界" for index, runeValue := range greeting { fmt.Printf("Index: %d, Rune: %c\n", index, runeValue) } }
循环单独处理每个 Unicode 字符。请注意,某些字符在 UTF-8 编码中可能占用多个字节。
通道的 range 遍历
range
可以迭代通道值,直到通道关闭。此示例显示了通道迭代。
channel_range.go
package main import "fmt" func main() { ch := make(chan string, 2) ch <- "first" ch <- "second" close(ch) for value := range ch { fmt.Println(value) } }
循环从通道读取,直到通道关闭。Range 通过自动处理关闭条件来简化通道的消耗。
数组指针的 range 遍历
当对数组指针进行 range 遍历时,Go 会自动对其进行解引用。此示例演示了此行为。
pointer_range.go
package main import "fmt" func main() { arr := [3]int{1, 2, 3} ptr := &arr for index, value := range ptr { fmt.Printf("Index: %d, Value: %d\n", index, value) } }
指针 ptr
在迭代期间会自动解引用。这使得使用数组指针更加方便。
实际示例:求和
这个实际示例演示了如何使用 range
计算切片中值的总和。
sum_range.go
package main import "fmt" func main() { numbers := []int{5, 10, 15, 20, 25} sum := 0 for _, num := range numbers { sum += num } fmt.Printf("Sum: %d\n", sum) }
循环使用 _
忽略索引,并将值累加到 sum
中。Range 使迭代干净而简洁。
来源
本教程通过迭代不同集合类型的实际示例,介绍了 Go 中的 range
关键字。