为什么Go的基本类型和复杂类型变量声明语法不一致?

问题描述 投票:0回答:1

在 Go 中,我可以使用长变量声明形式来声明整数和切片:

var i int
var s []int

int
[]int
是类型。到目前为止,一切都很好。但是,如果我想初始化变量,我应该写:

var i int = 2
var s = []int{1, 2, 3}

不是

var s []int = {1, 2, 3}

为什么会出现这样的不一致?

go
1个回答
0
投票

规范中这样描述了变量声明

如果给出了表达式列表,则使用遵循赋值语句规则的表达式来初始化变量。

如果存在类型,则每个变量都会被赋予该类型。否则,每个变量都会在赋值中被赋予相应初始化值的类型。

在声明中

var i int = 2

该类型存在且为

int
。表达式
2
存在并使用通常的赋值规则分配给变量。

声明中:

var s = []int{1, 2, 3}

类型不存在(

=
之前没有指定类型),因此变量被赋予初始化值的类型。复合文字表达式
[]int{1, 2, 3}
的类型为
[]int

声明

var s []int = {1, 2, 3}

声明了

[]int
类型的变量,但无法编译,因为
{1, 2, 3}
不是有效的表达式。

这里没有矛盾。问题是

{1, 2, 3}
不是一个表达式。

© www.soinside.com 2019 - 2024. All rights reserved.