Go 为什么是运营商=&引用;当声明不同类型的对象时,in-var声明位于不同的位置?

Go 为什么是运营商=&引用;当声明不同类型的对象时,in-var声明位于不同的位置?,go,Go,我是围棋的新手。努力学习。我注意到这两种声明之间有一个奇怪的区别: var arr = [3]int {1,2,3} var i int8 = 5 我指的是“=”操作符的位置。这背后有什么我应该知道的故事吗?从C++程序员的角度来看,第一个看起来很可疑。闻起来像是一个临时对象的赋值,它被创建,然后复制到左侧目标。 有人能澄清一下吗?是否存在与性能相关的问题?Go规范定义如下: VarDecl=“var”(VarSpec |“({VarSpec”;“}”))。 VarSpec=Identifie

我是围棋的新手。努力学习。我注意到这两种声明之间有一个奇怪的区别:

var arr = [3]int {1,2,3}
var i int8 = 5
我指的是“=”操作符的位置。这背后有什么我应该知道的故事吗?从C++程序员的角度来看,第一个看起来很可疑。闻起来像是一个临时对象的赋值,它被创建,然后复制到左侧目标。 有人能澄清一下吗?是否存在与性能相关的问题?

Go规范定义如下:

VarDecl=“var”(VarSpec |“({VarSpec”;“}”))。

VarSpec=IdentifierList(类型[“=”ExpressionList]|“=”ExpressionList)。

这意味着在
var myIdent
=
符号之间可能存在或不存在显式类型

此外:

如果存在类型,则为每个变量指定该类型。否则,将在赋值中为每个变量指定相应初始化值的类型

当赋值为非类型化常量时,这一点尤其重要:例如在
var x=5
中,文本
5
是非类型化的,因此(引号)“它首先隐式转换为其默认类型”。对于整数常量,默认值为
int

相反,在
var x int8=5
中,
x
实际上是
int8

Go规范定义如下:

VarDecl=“var”(VarSpec |“({VarSpec”;“}”))。

VarSpec=IdentifierList(类型[“=”ExpressionList]|“=”ExpressionList)。

这意味着在
var myIdent
=
符号之间可能存在或不存在显式类型

此外:

如果存在类型,则为每个变量指定该类型。否则,将在赋值中为每个变量指定相应初始化值的类型

当赋值为非类型化常量时,这一点尤其重要:例如在
var x=5
中,文本
5
是非类型化的,因此(引号)“它首先隐式转换为其默认类型”。对于整数常量,默认值为
int


相反,在
var x int8=5
中,
x
实际上是一个
int8

从值推断出第一条语句中的变量类型。第二条语句中的变量类型是显式指定的。根据编译时类型的确定方式,没有运行时性能差异


=符号在两个中的位置相同:在值之前

这两个语句的任何性能差异都是所使用的类型和值不同的结果

第一个声明可以使用显式类型编写,但它比需要的更详细:

var arr [3]int = [3]int{1,2,3}
第二个声明可以使用推断类型编写:

var i = int8(5)

第一条语句中的变量类型是从该值推断出来的。第二条语句中的变量类型是显式指定的。根据编译时类型的确定方式,没有运行时性能差异


=符号在两个中的位置相同:在值之前

这两个语句的任何性能差异都是所使用的类型和值不同的结果

第一个声明可以使用显式类型编写,但它比需要的更详细:

var arr [3]int = [3]int{1,2,3}
第二个声明可以使用推断类型编写:

var i = int8(5)

第一条语句中的变量类型是从该值推断出来的。第二条语句中的变量类型是显式指定的。在编译时确定类型的方式没有性能差异。这两个语句性能的任何差异都是由于使用了不同的类型和值。两个语句中的=符号位于相同的位置:在值之前。哦。。。我也可以说“var j int8=int8(5)”和“var arr[3]int=[3]int{1,2,3}”,现在看起来是一致的。谢谢@ThinkGoodly;如果你把这个信息输入到答案中,我会接受并投票赞成。第一个语句中变量的类型是从该值推断出来的。第二条语句中的变量类型是显式指定的。在编译时确定类型的方式没有性能差异。这两个语句性能的任何差异都是由于使用了不同的类型和值。两个语句中的=符号位于相同的位置:在值之前。哦。。。我也可以说“var j int8=int8(5)”和“var arr[3]int=[3]int{1,2,3}”,现在看起来是一致的。谢谢@ThinkGoodly;如果你把这个信息加入我的答案,我会接受并投赞成票。