Golang Range使用技巧

在Golang中使用range时,如何正确获取元素的索引和值?遍历map时顺序是随机的吗?range在切片和数组上的表现有什么不同?使用range时如何避免常见的坑,比如循环变量被重用的问题?能分享一些实际项目中运用range的高效技巧吗?

2 回复

Golang中range遍历时,索引和值可分别获取。遍历map时顺序随机,切片则按索引顺序。若只需索引,可省略值变量。修改值需通过索引操作,因range返回的是副本。

更多关于Golang Range使用技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,range关键字用于遍历数组、切片、字符串、映射和通道。以下是一些常见的使用技巧和示例:

  1. 遍历数组/切片
    获取索引和值:

    nums := []int{10, 20, 30}
    for index, value := range nums {
        fmt.Printf("索引:%d,值:%d\n", index, value)
    }
    
  2. 忽略索引或值
    使用下划线 _ 忽略不需要的部分:

    for _, value := range nums { // 仅取值
        fmt.Println(value)
    }
    for index := range nums { // 仅取索引
        fmt.Println(index)
    }
    
  3. 遍历映射
    获取键值对:

    m := map[string]int{"a": 1, "b": 2}
    for key, value := range m {
        fmt.Printf("键:%s,值:%d\n", key, value)
    }
    
  4. 遍历字符串
    按Unicode字符遍历(非字节):

    str := "Go语言"
    for index, char := range str {
        fmt.Printf("位置:%d,字符:%c\n", index, char)
    }
    
  5. 遍历通道
    持续接收数据直到通道关闭:

    ch := make(chan int)
    go func() {
        ch <- 1
        ch <- 2
        close(ch)
    }()
    for value := range ch {
        fmt.Println(value)
    }
    
  6. 修改遍历的元素
    通过索引直接修改切片元素:

    for i := range nums {
        nums[i] *= 2 // 每个元素乘以2
    }
    

注意事项

  • 遍历映射时顺序不固定。
  • 字符串遍历返回的是rune类型字符。
  • 通道遍历需确保最终关闭通道,否则会导致死锁。

合理使用range能使代码更简洁高效。

回到顶部