在 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)
参考:
我是新手,目前正在经历 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)
参考: