当前位置:首页 > Go > 正文

Go语言 for-range 遍历详解(掌握数组、切片与映射的高效遍历方法)

Go语言 中,for-range 是一种非常常用且高效的遍历方式,适用于数组、切片和映射(map)等数据结构。对于刚入门 Go 的开发者来说,掌握 for-range 的用法是编写简洁、可读性强代码的关键一步。

Go语言 for-range 遍历详解(掌握数组、切片与映射的高效遍历方法) for-range遍历  Go数组遍历 Go切片遍历 Go映射遍历 第1张

什么是 for-range?

for-range 是 Go 语言中专为遍历集合类型设计的语法糖。它能自动处理索引和值的获取,避免手动维护循环变量,使代码更安全、更清晰。

基本语法如下:

for index, value := range collection {    // 使用 index 和 value}

其中,index 是当前元素的索引(对 map 来说是 key),value 是当前元素的值。如果你不需要索引或值,可以用下划线 _ 忽略。

1. 遍历数组(Array)

数组是固定长度的同类型元素集合。使用 for-range 可以轻松遍历每个元素:

package mainimport "fmt"func main() {    arr := [3]string{"苹果", "香蕉", "橙子"}    for i, fruit := range arr {        fmt.Printf("索引 %d: %s\n", i, fruit)    }}

输出结果:

索引 0: 苹果索引 1: 香蕉索引 2: 橙子

如果你只关心值,可以忽略索引:

for _, fruit := range arr {    fmt.Println(fruit)}

2. 遍历切片(Slice)

切片是动态长度的数组视图,for-range 对它的遍历方式与数组几乎相同:

slice := []int{10, 20, 30, 40}for i, v := range slice {    fmt.Printf("位置 %d 的值是 %d\n", i, v)}

注意:在 for-range 中,v 是元素的副本,修改 v 不会影响原切片。如果需要修改原切片,请通过索引操作:

// 错误:不会修改原切片for _, v := range slice {    v *= 2  // 无效!}// 正确:通过索引修改for i := range slice {    slice[i] *= 2}

3. 遍历映射(Map)

映射(map)是键值对集合。for-range 遍历时,index 实际上是 key,value 是对应的值:

scores := map[string]int{    "张三": 95,    "李四": 88,    "王五": 92,}for name, score := range scores {    fmt.Printf("%s 的成绩是 %d 分\n", name, score)}

注意:Go 中 map 的遍历顺序是随机的,这是为了防止开发者依赖特定顺序。

同样,你可以只遍历 key 或只遍历 value:

// 只遍历 keyfor name := range scores {    fmt.Println(name)}// 只遍历 value(忽略 key)for _, score := range scores {    fmt.Println(score)}

常见误区与注意事项

  • 值是副本:在遍历过程中,value 是原元素的拷贝,修改它不会影响原始数据(尤其是切片和数组)。
  • map 遍历无序:不要依赖 map 的遍历顺序,如需有序,请先提取 key 并排序。
  • 避免在遍历中修改集合:在遍历 map 时删除或添加元素可能导致运行时 panic,应谨慎操作。

总结

for-range 是 Go 语言中处理集合遍历的强大工具。无论是 Go数组遍历Go切片遍历 还是 Go映射遍历,它都能提供简洁、安全的语法支持。掌握这些技巧,将帮助你写出更地道的 Go 代码。

记住关键词:Go语言 for-range遍历Go数组遍历Go切片遍历Go映射遍历——它们是你深入 Go 编程的重要基础。