对于Go中的两个变量的循环

时间:2016-06-28 16:39:19

标签: go

不允许在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')

3 个答案:

答案 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 {
            }
        }
    }