不允许在Go中使用以下for循环,
for (int i = 0, j = 1; i < 10; i ++ , j ++) {...}
下面两个变量的for循环的正确等价是什么?
resp = Net::HTTP.post_form(url, 'order' => @order.to_json, 'max' => '50')
答案 0 :(得分:61)
您没有逗号运算符来加入多个语句,但您确实有多个分配,因此this works:
package main
import (
"fmt"
)
func main() {
for i, j := 0, 1; i < 10; i, j = i+1, j+1 {
fmt.Println("Hello, playground")
}
}
答案 1 :(得分:5)
尽管可以接受以上答案,但它完全可以满足需要。但是,我想对此做出进一步的解释。
Golang不支持许多可以用简单的术语完成的事情。 For循环是最常见的示例。 Go's For循环的优点在于,它将许多现代循环样式合并为一个关键字。
类似地,Golang也使用多变量声明和赋值。针对上述问题,我们可以使用Golang提供的这个简单工具解决多变量for循环问题。如果您想进一步解释,该问题将提供declaring multiple variables in one statement的更多细节和方式。
回到for循环,如果我们要声明相同数据类型的变量,可以使用此声明它们
var a,b,c string
但是我们使用了短时for循环,因此我们可以使用相同的值对其进行初始化
i,j := 0,1
不同的数据类型和不同的值
,如果我们要声明不同类型的变量并希望分配不同的值,则可以通过分隔变量名称以及在逗号后用==分隔不同的值来实现。例如
c,i,f,b := 'c',23423,21.3,false
分配运算符的使用
稍后,我们可以使用相同的方法将值分配给多个变量。
x,y := 10.3, 2
x,y = x+10, y+1
在单个语句中混合Struct和Normal类型
即使我们可以以相同的方式使用结构类型或指针。这是一个迭代链接列表的函数,该列表定义为
func (this *MyLinkedList) Get(index int) int {
for i,list := 0,this; list != nil; i,list = i+1,list.Next{
if(i==index){
return list.Val
}
}
return -1
}
此列表定义为
type MyLinkedList struct {
Val int
Next *MyLinkedList
}
正在回答原始问题
谈到起源问题,只需完成即可
for i, j := 0, 1; i < 10; i, j = i+1, j+1 {
fmt.Println("i,j",i,j)
}
答案 2 :(得分:0)
正如阿卜杜勒先生所指出的,要在两个变量之间进行迭代,可以使用以下构造:
var step int = 4
for row := 0; row < rowMax; row++ {
for col := 0; col < colMax; col++ {
for rIndex, cIndex := row, col; rIndex <= row+step && cIndex <= col; rIndex, cIndex = rIndex+1, cIndex+1 {
}
}
}