Go 多变量赋值

Go 多变量赋值,go,Go,下面的代码片段把我弄糊涂了: v,ok:=a[1]//错误:分配计数不匹配:2=1 上面的代码由于计数不匹配而引发错误,但下面的代码段似乎工作正常: for i, id:= range ids { fmt.Printf("%d - ID: %d\n",i,id) } 这是否意味着range同时返回索引和值,因为上面的代码段可以正常工作?for循环的range形式在切片或映射上迭代 在切片上进行测距时,每次迭代返回两个值: 第一个是切片的索引 第二个是该索引处元素的副本 假设我们有一个函数

下面的代码片段把我弄糊涂了:

v,ok:=a[1]//错误:分配计数不匹配:2=1

上面的代码由于计数不匹配而引发错误,但下面的代码段似乎工作正常:

for i, id:= range ids
{
   fmt.Printf("%d - ID: %d\n",i,id)
}

这是否意味着
range
同时返回索引和值,因为上面的代码段可以正常工作?

for循环的
range
形式在切片或映射上迭代

在切片上进行测距时,每次迭代返回两个值:

  • 第一个是切片的索引
  • 第二个是该索引处元素的副本
  • 假设我们有一个函数来验证一个数字是否为
    素数,并且我们有一个包含候选数字的数组,那么我们可以用两种不同的方式调用该函数:

    var prime[]int=[]int{2,3,5,7,11,13,17,19,23}
    func TestIsPrimeByValue(t*testing.t){
    对于u,项:=范围素数{
    如果!iPrime(项目){
    t、 失败()
    }
    }
    }
    func TestIsPrimeByIndex(t*testing.t){
    对于i:=范围素数{
    if!IsPrime(素数[i]){
    t、 失败()
    }
    }
    }
    
    在第一个循环中,我们迭代数组的
    值。

    对于第二个循环,我们正在迭代数组的
    索引。

    是的,请注意,“逗号ok”习惯用法是一种特殊的赋值形式,仅由3个表达式、和支持。切片索引不支持这种特殊形式,这就是为什么会出现这种错误的原因。是的,但如果您在地图中查找,这同样有效。如果在阵列中,这是不正确的