如何在Golang中使用range遍历数组slice与map

来源:站长联盟作者:狼行天下头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在Golang中使用range遍历数组slice与map》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在Golang中使用range遍历数组slice与map》有用,将其分享出去将是对创作者最好的鼓励。

在Golang的编程实践中,range关键字是处理集合类数据结构遍历的高效工具,它可以适配数组、slice、map等多种数据类型,同时提供了简洁的语法来同时获取索引和对应的值,大幅减少了传统for循环遍历的冗余代码。不同的数据结构在使用range遍历时,返回值的含义和操作方式存在一定差异,需要开发者区分使用。

如何在Golang中使用range遍历数组slice与map

range遍历数组

数组是Golang中的值类型,长度固定,使用range遍历数组时,默认会同时返回当前元素的索引和对应的值。如果只需要索引或者只需要值,可以通过下划线忽略不需要的返回值。

以下是遍历数组的示例代码:

package main

import "fmt"

func main() {
    // 定义一个长度为3的int类型数组
    arr := [3]int{10, 20, 30}
    
    // 同时获取索引和值
    fmt.Println("同时获取索引和值:")
    for index, value := range arr {
        fmt.Printf("索引:%d,值:%dn", index, value)
    }
    
    // 只获取索引
    fmt.Println("只获取索引:")
    for index := range arr {
        fmt.Printf("索引:%dn", index)
    }
    
    // 只获取值
    fmt.Println("只获取值:")
    for _, value := range arr {
        fmt.Printf("值:%dn", value)
    }
}

range遍历slice

slice是数组的引用类型,长度可变,使用range遍历slice的语法和遍历数组完全一致,同样可以返回索引和对应的值。需要注意的是,遍历得到的value是slice元素的拷贝,修改value不会影响原始的slice元素。

遍历slice的示例代码如下:

package main

import "fmt"

func main() {
    // 定义一个slice
    s := []int{1, 2, 3, 4}
    
    fmt.Println("遍历slice原始值:")
    for index, value := range s {
        fmt.Printf("索引:%d,值:%dn", index, value)
    }
    
    // 尝试修改遍历得到的value
    for _, value := range s {
        value = value * 2
    }
    fmt.Println("修改value后的slice:", s) // 输出[1 2 3 4],原始slice未改变
    
    // 正确修改slice元素的方式,通过索引修改
    for index := range s {
        s[index] = s[index] * 2
    }
    fmt.Println("通过索引修改后的slice:", s) // 输出[2 4 6 8]
}

range遍历map

map是键值对结构,使用range遍历map时,返回的是键值对,顺序是不固定的。如果只需要键或者只需要值,同样可以通过下划线忽略不需要的返回值。遍历map时无法直接获取索引,因为map本身是无序的,没有索引的概念。

遍历map的示例代码如下:

package main

import "fmt"

func main() {
    // 定义一个map
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    
    // 同时获取键和值
    fmt.Println("同时获取键和值:")
    for key, value := range m {
        fmt.Printf("键:%s,值:%dn", key, value)
    }
    
    // 只获取键
    fmt.Println("只获取键:")
    for key := range m {
        fmt.Printf("键:%sn", key)
    }
    
    // 只获取值
    fmt.Println("只获取值:")
    for _, value := range m {
        fmt.Printf("值:%dn", value)
    }
}

遍历时的注意事项

遍历引用类型的元素修改问题

当slice或map中存储的是引用类型(比如slice、map、指针)时,遍历得到的value虽然是拷贝,但拷贝的是引用,因此修改value内部的属性会影响原始数据。

示例如下:

package main

import "fmt"

func main() {
    // slice中存储的是slice引用
    s := [][]int{{1, 2}, {3, 4}}
    for _, value := range s {
        value[0] = value[0] * 10 // 修改value内部的元素,会影响原始slice
    }
    fmt.Println(s) // 输出[[10 2] [30 4]]
}

遍历时删除map元素

在使用range遍历map的过程中,可以安全地删除当前正在遍历的键值对,但是不能新增键值对,否则可能会导致遍历结果不可预期。

示例如下:

package main

import "fmt"

func main() {
    m := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
    }
    // 遍历时删除值小于3的键值对
    for key, value := range m {
        if value < 3 {
            delete(m, key)
        }
    }
    fmt.Println(m) // 输出map[c:3]
}

遍历数组和slice时的索引范围

range遍历数组和slice时,索引的范围是0到长度减1,和传统的for循环遍历的索引范围一致,不会出现越界问题。

总结

range是Golang中非常实用的遍历工具,适配数组、slice、map等常用数据结构,语法简洁且功能完善。使用时需要注意不同数据结构的返回值差异,以及遍历引用类型时的修改逻辑,避免因为对value拷贝特性的误解导致程序出现逻辑错误。掌握range的正确使用方式,可以有效提升Golang代码的编写效率和可读性。

Golangrange数组遍历slice遍历map遍历修改时间:2026-06-14 13:54:16

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。