变量

通常用var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。

Go的基本类型有:

  1. * bool
  2. * string
  3. * int int8 int16 int32 int64
  4. * uint uint8 uint16 uint32 uint64 uintptr
  5. * byte // uint8 的别名
  6. * rune // int32 的别名 代表一个Unicode码
  7. * float32 float64
  8. * complex64 complex128

变量的声明的语法一般是:

  1. var 变量名字 类型 = 表达式

通常情况下“类型”或“= 表达式”两个部分可以省略其中的一个。如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。如果初始化表达式被省略,那么将用零值初始化该变量。数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。

零值初始化机制可以确保每个声明的变量总是有一个良好定义的值,因此在Go语言中不存在未初始化的变量。

通常我们在编程的过程中,也用简短声明变量。它以“名字 := 表达式”形式声明变量,变量的类型根据表达式来自动推导。

  1. destination := 12
  2. result := rand.Float64() * 3.0

因为简洁和灵活的特点,简短变量声明被广泛用于大部分的局部变量的声明和初始化。var形式的声明语 句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方。

变量的生命周期指的是在程序运行期间变量有效存在的时间间隔。对于在包一级声明的变量来说,它们 的生命周期和整个程序的运行周期是一致的。而相比之下,在局部变量的声明周期则是动态的:从每次 创建一个新变量的声明语句开始,直到该变量不再被引用为止,然后变量的存储空间可能被回收。函数 的参数变量和返回值变量都是局部变量。它们在函数每次被调用的时候创建。