Go中的元组赋值

Go中的元组赋值,go,Go,发件人: 元组分配将多值操作的各个元素分配给变量列表。有两种形式。在第一种情况下,右操作数是单个多值表达式,例如函数调用、通道或映射操作或类型断言。左侧的操作数必须与值的数目匹配。例如,如果f是一个返回两个值的函数,x,y=f()将第一个值指定给x,第二个值指定给y。在第二种形式中,左边的操作数必须等于右边的表达式数,每个表达式都必须是单值的,右边的第n个表达式被赋给左边的第n个操作数:one,two,three=一', '二', '三' 转让分两个阶段进行。首先,左侧的索引表达式和指针间接(包

发件人:

元组分配将多值操作的各个元素分配给变量列表。有两种形式。在第一种情况下,右操作数是单个多值表达式,例如函数调用、通道或映射操作或类型断言。左侧的操作数必须与值的数目匹配。例如,如果f是一个返回两个值的函数,
x,y=f()
将第一个值指定给x,第二个值指定给y。在第二种形式中,左边的操作数必须等于右边的表达式数,每个表达式都必须是单值的,右边的第n个表达式被赋给左边的第n个操作数:
one,two,three=一', '二', '三'

转让分两个阶段进行。首先,左侧的索引表达式和指针间接(包括选择器中的隐式指针间接)的操作数和右侧的表达式都按通常的顺序求值。其次,作业按从左到右的顺序进行

使用代码(
i,n=i+2,n-1
内部for循环):

输出为:

1999993
这不是正确的结果

该代码:

func (p *Prime) Generate(n uint) {
    p.Primes = make([]uint64, 1, n)
    p.Primes[0] = 2
next:
    for i := uint64(3); n > 1; i += 2 {
        q := uint64(math.Sqrt(float64(i)))
        for _, v := range p.Primes[1:] {
            if v > q {
                break
            }
            if i%v == 0 {
                continue next
            }
        }
        p.Primes = append(p.Primes, i)
        n--
    }
}
输出正确:

15485863
go版本go1.11.5 linux/amd64

我是不是在围棋的元组里漏掉了什么


提前感谢。

不,不是元组赋值给出了错误的结果

这两个代码之间存在细微的差异,这导致了错误。在playgound代码中,
i,n=i+2,n-1
使
n=n-1
在循环每次迭代时运行,而github代码仅在
i
为素数时运行(如果
继续下一步运行,则跳过
n--

15485863