【go】7-Go语言基础-变量
【目录】
变量是什么
声明单个变量
声明变量并初始化
类型推断(Type Inference)
声明多个变量
简短声明
总结:
定义单个变量的三种方式:
1、标准形式(可先定义,后初始化)
var 变量名 type变量类型 = 变量值
例如:
=1、先定义后初始化:
var name string
name='cc'
=2、定义时初始化
var name string = 'cc'
2、省略类型——类型推导
var 变量名 = 变量值
var name = 'cc'
3、简略声明
变量名: = 变量值
name : = 'cc'
变量是什么
变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。
声明单个变量
var name type 是声明单个变量的语法。
|
|
语句 var age int
声明了一个 int 类型的变量,名字为 age。我们还没有给该变量赋值。如果变量未被赋值,Go 会自动地将其初始化,赋值该变量类型的零值(Zero Value)。本例中 age 就被赋值为 0。如果你运行该程序,你会看到如下输出:
|
|
变量可以赋值为本类型的任何值。上一程序中的 age 可以赋值为任何整型值(Integer Value)。
|
|
上面的程序会有如下输出:
|
|
声明变量并初始化
声明变量的同时可以给定初始值。 var name type = initialvalue 的语法用于声明变量并初始化。
|
|
在上面的程序中,age 是具有初始值 29 的 int 类型变量。如果你运行上面的程序,你可以看见下面的输出,证实 age 已经被初始化为 29。
|
|
类型推断(Type Inference)
如果变量有初始值,那么 Go 能够自动推断具有初始值的变量的类型。因此,如果变量有初始值,就可以在变量声明中省略 type
。
如果变量声明的语法是 var name = initialvalue,Go 能够根据初始值自动推断变量的类型。
在下面的例子中,你可以看到在第 6 行,我们省略了变量 age
的 int
类型,Go 依然推断出了它是 int 类型。
|
|
声明多个变量
Go 能够通过一条语句声明多个变量。
声明多个变量的语法是 var name1, name2 type = initialvalue1, initialvalue2。
|
|
上述程序将在标准输出打印 width is 100 height is 50
。
你可能已经想到,如果 width 和 height 省略了初始化,它们的初始值将赋值为 0。
|
|
上面的程序将会打印:
|
|
在有些情况下,我们可能会想要在一个语句中声明不同类型的变量。其语法如下:
|
|
使用上述语法,下面的程序声明不同类型的变量。
|
|
这里我们声明了 string 类型的 name、int 类型的 age 和 height(我们将会在下一教程中讨论 golang 所支持的变量类型)。运行上面的程序会产生输出 my name is naveen , age is 29 and height is 0
。
简短声明
Go 也支持一种声明变量的简洁形式,称为简短声明(Short Hand Declaration),该声明使用了 := 操作符。
声明变量的简短语法是 name := initialvalue。
|
|
运行上面的程序,可以看到输出为 my name is naveen age is 29
。
简短声明要求 := 操作符左边的所有变量都有初始值。下面程序将会抛出错误 cannot assign 1 values to 2 variables
,这是因为 age 没有被赋值。
|
|
简短声明的语法要求 := 操作符的左边至少有一个变量是尚未声明的。考虑下面的程序:
|
|
在上面程序中的第 8 行,由于 b 已经被声明,而 c 尚未声明,因此运行成功并且输出:
|
|
但是如果我们运行下面的程序:
|
|
上面运行后会抛出 no new variables on left side of :=
的错误,这是因为 a 和 b 的变量已经声明过了,:= 的左边并没有尚未声明的变量。
变量也可以在运行时进行赋值。考虑下面的程序:
|
|
在上面的程序中,c 的值是运行过程中计算得到的,即 a 和 b 的最小值。上述程序会打印:
|
|
由于 Go 是强类型(Strongly Typed)语言,因此不允许某一类型的变量赋值为其他类型的值。下面的程序会抛出错误 cannot use "naveen" (type string) as type int in assignment
,这是因为 age 本来声明为 int 类型,而我们却尝试给它赋字符串类型的值。
|
|