如何在 Go 中为循环变量声明变量类型?

Lon*_*ner 5 for-loop go variable-declaration

请参阅此代码。

package main

import (
    "fmt"
)

func main() {
    var arr [4]string = [4]string{"foo", "bar", "baz", "qux"}

    for a, b := range arr {
        fmt.Println(a, b)
    }

    // How can I fix this code?
    /*
    for x int, y string = range arr {
        fmt.Println(a, b)
    }
    */
}
Run Code Online (Sandbox Code Playgroud)

第一个 for 循环使用:=运算符自动推导出aand的类型b。但是如果我想明确指定循环变量的类型呢?我尝试这样做是在注释代码的第二个块中,这当然因以下错误而失败。

# command-line-arguments
./foo.go:15: syntax error: unexpected name, expecting {
./foo.go:18: syntax error: unexpected }
Run Code Online (Sandbox Code Playgroud)

你能不能帮我解决的第二个代码块,这样我可以指定类型的xy明确?

Dar*_*rov 5

不幸的是,语言规范不允许您在 for 循环中声明变量类型。你能得到的最接近的是:

var a int
var b string
for a, b = range arr {
    fmt.Println(a, b)
}
Run Code Online (Sandbox Code Playgroud)

但通常如果你给变量赋予有意义的名称,它们的类型也会很清楚:

for index, element := range arr {
    fmt.Println(index, element)
}
Run Code Online (Sandbox Code Playgroud)