在Go编程语言中定义变量

时间:2016-03-29 07:33:10

标签: go

我正在学习Go语言并遇到这种类型的变量声明:

i:=1;

但它说Go有静态变量。我应该以某种方式定义变量

var i int=1;

那么这两种方法有什么区别?在第一个中,我们不需要指出数据类型。为什么会这样?

2 个答案:

答案 0 :(得分:3)

第一个i := 1称为short variable declaration。它是具有初始化表达式的常规variable declaration的简写,但没有类型:

var IdentifierList = ExpressionList

您没有指定i的类型,但i将根据特定规则提供类型。其类型将自动推断。在这种情况下,它将是int类型,因为初始化表达式1是一个无类型的整数常量,其默认类型为int,所以当需要一个类型时(例如,它用于短变量声明),int类型将被推导出来。

所以Go是静态类型的。这意味着变量将具有静态类型,并且在运行时存储在其中的值将始终为该类型。静态类型并不意味着必须明确指定静态类型,它只是意味着变量必须具有静态类型 - 在编译时决定 - 即使你使用短变量声明也满足哪个条件不要指定它。

请注意,如果使用var关键字声明变量,也可以省略该类型:

var i = 1

在这种情况下,类型也将从初始化表达式的类型中推断出来。

Spec: Variable declaration:

  

如果存在类型,则为每个变量赋予该类型。否则,为每个变量赋予赋值中相应初始化值的类型。如果该值是无类型常量,则它converted的第一个default type;如果它是无类型的布尔值,则首先将其转换为类型bool。预先声明的值nil不能用于初始化没有显式类型的变量。

答案 1 :(得分:0)

Go的设计考虑了易用性。因此,新变量能够使用:=运算符获得右侧的隐式类型。例如,常量1在go中也有隐式类型。