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