一、变量的介绍

go语言的变量和其他的语言类似,变量类似于门牌号;门牌号是一个房间的唯一标识(一般的情况下,如果说极端的情况那么另当别论),同样的,变量是一个数据存储空间的表示;通过门牌号我们可以找到房间,同样的,通过变量名可以访问到变量(值)。

二、go语言变量的使用

同其他的变量,go语言变量使用大致分为三步

① 声明变量

② 为变量赋值

③ 使用变量

package main
import "fmt"

func main() {
	// 定义变量/声明变量
	var i int
	// 给i赋值
	i = 10
	// 使用变量
	fmt.Println("i = ", i)
}

上面就是一个简单的使用go语言的变量的案例

三、go语言变量的使用细节

① 变量代表内存的一个存储的区域

② 该变量有自己的名称(变量名)和类型(数据类型)

③ 变量使用的三种方式

     (1)指定变量的类型,声明变量后,若不赋值,使用默认值

     (2)根据值自行的判断变量的类型(类型推断?)

     (3)省略var,注意,:=左侧的变量不应该是已经声明过的,否则编译会报错

package main
import "fmt"

func main() {
	// 若声明了变量但是没有进行赋值 那么使用默认值
	// int的默认值是 0 
	var i int
	fmt.Println("i = ", i) // 这句话会输出 i = 0

	// 根据变量的值进行类型推断
	var num = 10.11
	fmt.Println("num = ", num) // 这句话会输出 num = 10.11

	// 省略var 此时不能使用= 而是使用:= 进行变量的书写
	// 注意::= 左侧的变量不能是已经声明过的变量 否则会编译报错
	// 使用这种写法 等价 -> var name string     name = "tom" 
	name := "tom"
	fmt.Println("name = ", name)
	
	// 如果使用如下的方式书写 在编译时会有如下的提示信息
 	// no new variables on left side of :=
	// name := "123"
	// fmt.Println("name = ", name)
}

以上是对上面的三个使用方式的说明

④ 在编程中,可以一次性声明多个变量

package main
import "fmt"

// 同时声明多个全局的变量
var b1 = 100
var b2 = 200
var name = "jerry"
// 设计者认为上述的声明太麻烦 所以使用了如下的方式进行替换
var (
	b3 = 400
	b4 = 600
	name2 = "jack"
)

func main() {
	// 可以一次声明多个变量
	var n1, n2, n3 int
	fmt.Println("n1 = ", n1, "n2 = ", n2, "n3 = ", n3)
	// 一次定义多个变量的方式2
	var m1, m2, m3 = 100, "tom", 88
	fmt.Println("m1 = ", m1, "m2 = ", m2, "m3 = ", m3)
	// 一次性定义多个变量的方式3 同样 类似于单个使用变量 同样可以直接使用:= 进行变量的声明+赋值
	o1, o2, o3 := 200, "哈哈", 300
	fmt.Println("o1 = ", o1, "o2 = ", o2, "o3 = ", o3)
	// 打印全局变量
	fmt.Println("b1 = ", b1, "b2 = ", b2, "name = ", name)
	fmt.Println("b3 = ", b3, "b4 = ", b4, "name2 = ", name2)
}

⑤ 该区域的数据值可以在同一个类型的范围内变化

⑥ 变量在同一个作用于范围内不能重名

package main
import "fmt"

func main() {
	// 该区域的数据值可以在同一类型范围内变化
	var i int = 10
	i = 30
	i = 50
	fmt.Println("i = ", i)
	// 如下写法会提示错误
	// constant 1.2 truncated to integer
	// i = 1.2 

	// 同其他语言一样 变量在同一个作用域(在一个函数或者在代码块)内不能重名
	// 同样的 也不能使用:= 进行同一个变量的声明+赋值
	// i redeclared in this block
	// var i int = 59
}

⑦ 变量 = 变量名 + 值 + 数据类型

⑧ 变量如果没有初值 编译器会使用默认值 比如int是0 string默认是空串等等