我正在学习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用于忽略切片索引。但它似乎也在改变指数,从而忽略了切片中的最后一个元素。
您能否解释一下这里发生的事情以及可能的原因。我假设这不是一个错误,而是设计上的。 Go是如此精心设计的,那么这种行为的可能用例是什么?
答案 0 :(得分:7)
单个参数范围使用索引,而不是值。因为你的索引也在0到9之间使用范围而只有一个param会将索引从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