变量
变量时赋予内存位置以存储特定类型的值的名称。在Go中声明变量有多种语法,下面逐一介绍。
什么是变量
var name type
是用来声明单个变量的语法。
1 | package main |
该语句var age int
声明了一个名为age
类型为int
的变量。我们没有给这个变量赋值。如果一个变量没有被赋值,Go 会自动用变量类型的零值初始化它。在这种情况下,年龄被赋值为0
,这是 的零值int
。如果你运行这个程序,你可以看到下面的输出。
1 | My age is 0 |
可以将变量分配任何属于其类型的值。在上面的程序中,age
可以分配任何整数值。
1 | package main |
上面的程序将打印以下输出。
1 | My age is 0 |
用初始值声明变量
在声明变量时可以为其提供初始值,语法如下:
1 | var name type = initialvalue |
1 | package main |
在上面的程序中,age
是一个类型的变量int
并且具有初始值29
。上面的程序将打印以下输出。
1 | My age is 29 |
它表明age
已被初始化为值 29。
类型判断
如果变量具有初始值,Go 将自动能够使用该初始值推断该变量的类型。因此,如果变量具有初始值,则可以删除变量声明中的type
。
如果使用以下语法声明变量:
1 | var name = initialvalue |
Go 会自动从初始值推断该变量的类型。
在下面的示例中,我们可以看到在第 6 行中删除了age
变量的类型int
但是由于变量有一个初始值29
,Go 可以推断出它的类型为int
。
1 | package main |
多变量声明
可以使用单个语句声明多个变量。
以下是多变量声明的语法:
1 | var name1, name2 type = initialvalue1, initialvalue2 |
1 | package main |
如果变量具有初始值,则可以删除类型。由于上述程序具有变量的初始值,因此可以删除类型int
。
1 | package main |
上面的程序将width is 100 height is 50
作为输出打印。
正如你现在可能已经猜到的那样,如果没有为宽度和高度指定初始值,它们将被指定为它们的初始值0
。
1 | package main |
上面的程序将打印
1 | width is 0 height is 0 |
在某些情况下,我们可能希望在单个语句中声明不同类型的变量。这样的语法是:
1 | var( |
下面的程序使用上面的语法来声明不同类型的变量。
1 | package main |
在这里,我们声明了一个type为string
的变量name
。(我们将在下一个教程中讨论 Golang 中可用的各种类型)。
运行上面的程序会打印
1 | my name is naveen , age is 29 and height is 0 |
简写声明
Go 还提供了另一种简洁的方式来声明变量。这称为short hand declaration
(简写声明),它使用**:=**运算符。
声明变量的简写语法如下:
1 | name := initialvalue |
下面的程序使用简写语法来声明一个count
初始化为的变量10
。Go 会自动推断它count
的类型,int
因为它已经用整数值初始化10
。
1 | package main |
上面的程序将打印
1 | Count = 10 |
可以使用简写语法在一行中声明多个变量。
1 | package main |
上面的程序分别声明了两个变量name
和age
类型为string
和int
。
如果你运行上面的程序,你可以看到my name is naveen age is 29
被打印。
简写声明需要赋值左侧的所有变量的初始值。下面的程序将打印一个错误assignment mismatch: 2 variables but 1 values
。这是因为age没有被赋值。
1 | package main |
仅当**:=**左侧的至少一个变量是新声明的时,才能使用简写语法。考虑以下程序,
1 | package main |
在上面的程序中,在第 8 行,b已经被声明,但是c是新声明的,因此它可以工作并输出
1 | a is 20 b is 30 |
而如果我们运行下面的程序,
1 | package main |
它会打印错误/prog.go:8:10: no new variables on left side of :=
这是因为变量a和b都已经被声明了,并且在第8行**:=**的左侧没有新变量。
变量也可以被赋予在运行时计算的值。考虑以下程序,
1 | package main |
在上面的程序中,math是一个包,Min是该包中的一个函数。现在不要担心,我们将在接下来的教程中详细讨论包和函数。我们需要知道的是, 的值c
是在运行时计算的,它是a
和b
的最小值。上面的程序将打印:
1 | Minimum value is 145.8 |
由于 Go 是强类型的,因此声明为属于一种类型的变量不能被赋予另一种类型的值。下面的程序将打印一个错误cannot use "naveen" (type string) as type int in assignment
,因为age
它被声明为类型int
并且我们正在尝试为string
它分配一个值。
1 | package main |