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)
尽管以上答案已被接受,但它完全可以满足需要。但是,我想对此做出进一步的解释。
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)