插件窝 干货文章 Go语言for range循环:索引和值,究竟哪个被输出?

Go语言for range循环:索引和值,究竟哪个被输出?

value index 输出 range 739    来源:    2025-03-15

在Go语言中,for range循环用于遍历数组、切片、字符串、映射(map)和通道(channel)。在遍历时,for range循环会返回两个值:索引(或键)和对应的值。具体返回哪个值取决于你如何声明循环变量。

1. 遍历数组、切片或字符串

当你遍历数组、切片或字符串时,for range循环会返回两个值:索引和对应的元素值。

package main

import "fmt"

func main() {
    arr := []int{10, 20, 30, 40}

    for index, value := range arr {
        fmt.Printf("Index: %d, Value: %d\n", index, value)
    }
}

输出:

Index: 0, Value: 10
Index: 1, Value: 20
Index: 2, Value: 30
Index: 3, Value: 40

在这个例子中,index是数组的索引,value是对应的元素值。

2. 只输出索引

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

for index := range arr {
    fmt.Printf("Index: %d\n", index)
}

输出:

Index: 0
Index: 1
Index: 2
Index: 3

3. 只输出值

如果你只关心值,可以使用下划线 _ 来忽略索引:

for _, value := range arr {
    fmt.Printf("Value: %d\n", value)
}

输出:

Value: 10
Value: 20
Value: 30
Value: 40

4. 遍历映射(map)

对于映射(map),for range循环会返回键和值:

m := map[string]int{
    "apple":  5,
    "banana": 3,
    "cherry": 7,
}

for key, value := range m {
    fmt.Printf("Key: %s, Value: %d\n", key, value)
}

输出(顺序可能不同,因为map是无序的):

Key: apple, Value: 5
Key: banana, Value: 3
Key: cherry, Value: 7

5. 只输出键或值

同样地,你可以选择只输出键或值:

// 只输出键
for key := range m {
    fmt.Printf("Key: %s\n", key)
}

// 只输出值
for _, value := range m {
    fmt.Printf("Value: %d\n", value)
}

总结

  • for range循环中,索引和值都会被返回,但你可以选择只使用其中一个。
  • 如果你不需要某个值,可以使用下划线 _ 来忽略它。
  • 具体输出哪个值取决于你在循环中如何声明变量。

希望这个解释能帮助你理解Go语言中for range循环的行为!