一、变量的介绍
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默认是空串等等