猿问

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

到目前为止,我正在学习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)   

这让我有点难住了。根据我的理解,空白标识符用于忽略切片索引。但它似乎也在移动索引,从而忽略切片中的最后一个元素。


你能解释一下这里发生了什么,可能是为什么。我假设这不是错误并且是设计使然。Go 设计得非常好,那么这种行为的可能用例是什么?


慕的地10843
浏览 173回答 1
1回答

喵喔喔

单个参数范围使用索引,而不是值。因为您的索引也从 0 增加到 9 使用范围和单个参数会将索引从 0 增加到 9 并给您45package mainimport "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 = 0num = 1num = 2num = 3sum = 6
随时随地看视频慕课网APP

相关分类

Go
我要回答