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关键字用于遍历数组、切片、字符串、映射和通道。以下是一些常见的使用技巧和示例:
- 
遍历数组/切片
获取索引和值:nums := []int{10, 20, 30} for index, value := range nums { fmt.Printf("索引:%d,值:%d\n", index, value) } - 
忽略索引或值
使用下划线_忽略不需要的部分:for _, value := range nums { // 仅取值 fmt.Println(value) } for index := range nums { // 仅取索引 fmt.Println(index) } - 
遍历映射
获取键值对:m := map[string]int{"a": 1, "b": 2} for key, value := range m { fmt.Printf("键:%s,值:%d\n", key, value) } - 
遍历字符串
按Unicode字符遍历(非字节):str := "Go语言" for index, char := range str { fmt.Printf("位置:%d,字符:%c\n", index, char) } - 
遍历通道
持续接收数据直到通道关闭:ch := make(chan int) go func() { ch <- 1 ch <- 2 close(ch) }() for value := range ch { fmt.Println(value) } - 
修改遍历的元素
通过索引直接修改切片元素:for i := range nums { nums[i] *= 2 // 每个元素乘以2 } 
注意事项:
- 遍历映射时顺序不固定。
 - 字符串遍历返回的是
rune类型字符。 - 通道遍历需确保最终关闭通道,否则会导致死锁。
 
合理使用range能使代码更简洁高效。
        
      
                    
                    
                    
