我正在学习Go语言并遇到这种类型的变量声明:
i:=1;
但它说Go有静态变量。我应该以某种方式定义变量
var i int=1;
那么这两种方法有什么区别?在第一个中,我们不需要指出数据类型。为什么会这样?
答案 0 :(得分:3)
第一个i := 1
称为short variable declaration。它是具有初始化表达式的常规variable declaration的简写,但没有类型:
var IdentifierList = ExpressionList
您没有指定i
的类型,但i
将根据特定规则提供类型。其类型将自动推断。在这种情况下,它将是int
类型,因为初始化表达式1
是一个无类型的整数常量,其默认类型为int
,所以当需要一个类型时(例如,它用于短变量声明),int
类型将被推导出来。
所以Go是静态类型的。这意味着变量将具有静态类型,并且在运行时存储在其中的值将始终为该类型。静态类型并不意味着你必须明确指定静态类型,它只是意味着变量必须具有静态类型 - 在编译时决定 - 即使你使用短变量声明也满足哪个条件不要指定它。
请注意,如果使用var
关键字声明变量,也可以省略该类型:
var i = 1
在这种情况下,类型也将从初始化表达式的类型中推断出来。
如果存在类型,则为每个变量赋予该类型。否则,为每个变量赋予赋值中相应初始化值的类型。如果该值是无类型常量,则它converted的第一个default type;如果它是无类型的布尔值,则首先将其转换为类型
bool
。预先声明的值nil
不能用于初始化没有显式类型的变量。
答案 1 :(得分:0)
Go的设计考虑了易用性。因此,新变量能够使用:=
运算符获得右侧的隐式类型。例如,常量1
在go中也有隐式类型。