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

sof*_*sof 44 go

Go中不允许使用以下for循环,

for i := 0, j := 1; i < 10; i++, j++ {...}
Run Code Online (Sandbox Code Playgroud)

下面两个变量的for循环的正确等价是什么?

for (int i = 0, j = 1; i < 10; i ++ , j ++) {...} 
Run Code Online (Sandbox Code Playgroud)

two*_*two 78

您没有逗号运算符来连接多个语句,但您确实有多个赋值,因此这有效:

package main

import (
    "fmt"
)

func main() {
    for i, j := 0, 1; i < 10; i, j = i+1, j+1 {
        fmt.Println("Hello, playground")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @princebillyGK 正确。如果您尝试更新两个变量,您会陷入“i, j = expr1, expr2”,并且增量和“*=”是语句而不是表达式。 (3认同)

Abd*_*man 9

尽管以上答案已被接受,但它完全可以满足需要。但是,我想对此做出进一步的解释。

Golang不支持许多可以用简单的术语完成的事情。For循环是最常见的示例。Go's For循环的优点在于,它将许多现代循环样式合并为一个关键字。

类似地,Golang也使用多变量声明和赋值。针对上述问题,我们可以使用Golang提供的这个简单工具解决多变量for循环问题。如果您想进一步解释,此问题提供了更多详细信息以及在一个语句声明多个变量的方式。

回到for循环,如果我们想声明相同数据类型的变量,我们可以这样声明它们

var a,b,c string
Run Code Online (Sandbox Code Playgroud)

但是我们使用了短手for循环,因此我们可以使用相同的值进行初始化

  i,j := 0,1
Run Code Online (Sandbox Code Playgroud)

不同的数据类型和不同的值

如果我们要声明不同类型的变量并希望分配不同的值,则可以通过分隔变量名称以及在逗号后用==分隔不同的值来实现。例如

 c,i,f,b := 'c',23423,21.3,false
Run Code Online (Sandbox Code Playgroud)

赋值运算符的用法

稍后,我们可以使用相同的方法将值分配给多个变量。

    x,y := 10.3, 2
    x,y = x+10, y+1
Run Code Online (Sandbox Code Playgroud)

在单个语句中混合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
}
Run Code Online (Sandbox Code Playgroud)

此列表定义为

type MyLinkedList struct {
      Val int
      Next *MyLinkedList

 }
Run Code Online (Sandbox Code Playgroud)

回答原始问题

来到起源问题,简单地就可以做到

for i, j := 0, 1; i < 10; i, j = i+1, j+1 {
        fmt.Println("i,j",i,j)
    }
Run Code Online (Sandbox Code Playgroud)