gpt4 book ai didi

go - 为什么使用 _ 空白标识符的范围迭代会产生不同的值

转载 作者:IT王子 更新时间:2023-10-29 01:22:16 26 4
gpt4 key购买 nike

我在学习Go到目前为止玩得很开心。

以下代码将总和输出为 45

package main
import "fmt"

func main(){
//declare a slice
numSlice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var sum int = 0

for num := range numSlice {
sum += num
fmt.Println("num =", num)
}
fmt.Println("sum =", sum)
}

下面的代码,我使用 _ 空白标识符来忽略 for 声明中的索引,输出总和为 55

//declare a slice
numSlice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var sum int = 0

for _,num := range numSlice {
sum += num
fmt.Println("num =", num)
}
fmt.Println("sum =", sum)

这让我有点难过。据我了解 blank identifier用于忽略 slice 索引。但它似乎也在移动索引,从而忽略了 slice 中的最后一个元素。

能否请您解释一下这里发生的情况以及可能的原因。我假设这不是错误,而是设计使然。 Go 的设计如此出色,那么这种行为的可能用例是什么?

最佳答案

单个参数范围使用索引,而不是值。因为您的索引也从 0 增加到 9,所以使用带有单个参数的范围会将索引从 0 增加到 9,并给您 45

package main
import "fmt"

func main(){
//declare a slice
numSlice := []int{0, 0, 0, 0}
var sum int = 0

for num := range numSlice {
sum += num
fmt.Println("num =", num)
}
fmt.Println("sum =", sum)
}

输出

num = 0
num = 1
num = 2
num = 3
sum = 6

关于go - 为什么使用 _ 空白标识符的范围迭代会产生不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526896/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com