Golang range 是如何工作的?

Golang 的 range 是用于 for 循环遍历数组、切片、映射、字符串和通道的循环方式。
它的工作方式是:
一、切片
遍历切片时,会得到两个变量:

  • 索引(index) – int
  • 值(value) – T类型(T是切片的元素类型)
nums := []int{1, 2, 3}
for index, value := range nums {
    fmt.Printf("index:%d value:%d\n", index, value)
}

// 输出
// index:0 value:1 
// index:1 value:2
// index:2 value:3

二、 映射
遍历映射时,会得到两个变量:

  • key – K 类型(K是映射的键类型)
  • value – V类型(V是映射的值类型)
ages :=map[string]int{
   "a": 1,
   "b": 2,
}
for key,value := range ages{
   fmt.Println(key,value) 
}

三、通道
遍历通道时,会得到一个变量: value – 通道元素类型

c := make(chan int,2)
c <- 1  
c <- 2
for value := range c {
   fmt.Println(value)
}

这里只有值,没有索引。

总的来说, Golang 的 range 工作原理为:

  • 切片: 索引和值
  • 映射: key和value
  • 通道: 只有值

range 可以替代传统的 for 循环,实现更简洁的代码。
另外,字符串也可以使用 range 循环。