在 Go var 声明中显式提供类型失败,而隐式工作

Providing types explicitly in Go var declaraction fails while implicit works

我是新手,目前正在经历 go tool tour

简短变量声明 部分,我将示例代码修改为如下所示?

package main

import "fmt"

func main() {
    var i, j int = 1, 2
    k := 3
    var c bool, python string = true, "test"

    fmt.Println(i, j, k, c, python)
}

但是,然后我运行上面的代码,我得到了错误:

# command-line-arguments
./compile233.go:8:12: syntax error: unexpected comma at end of statement

但是,如果我从 var 声明中删除类型,如下所示:

package main

import "fmt"

func main() {
    var i, j int = 1, 2
    k := 3
    var c, python = true, "test"

    fmt.Println(i, j, k, c, python)
}

有效。

我无法弄清楚第一个例子有什么问题,这个错误似乎有点误导我。谁能解释我做错了什么以及为什么会出现错误?

变量声明语句定义为

VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .

这意味着如果你想在单个语句中声明多个变量并明确指定类型,它们都必须具有相同的类型。该类型必须位于标识符列表之后。

所以

var foo, bar bool // is valid
var foo bool, bar bool // is not (only one type qualifier is allowed)

参考: