变量是程序组成的基本单位
不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位,在程序里面无处不在。
- 复用:抽象,修改一处,所有引用该变量值得地方,都修改到了
- 配置,把程序的配置放到变量里面方便修改
- 简洁,容易阅读
变量介绍
概念
变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量(值)。
变量使用的基本步骤
- 声明变量(有人也叫∶定义变量)
- 赋值
- 使用
变量使用⚠️注意事项
(1)变量表示内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型)
在编程中,有时我们需要一次性声明多个变量,Golang也提供这样的语法
程序运行,在执行到定义变量的时候,会发生什么事情呢?(代码要运行起来,那么所有的代码必须加载到内存当中代码才可以运行)
声明了变量i就会在内存里面开辟一个数据空间,同时生成变量i,i就和数据空间关联起来了,当你只是声明了变量,但是没有赋值的时候有一个默认的值为0。
之后赋值了10,那么就会通过变量i找到数据空间将里面的值改为10。
(2)Golang变量使用的三种方式
第一种∶指定变量类型,声明后若不赋值,使用默认值,int类型默认值为0,其他类型默认值再说
var i int
fmt.Println(i) //0
第二种∶根据值自行判定变量类型(类型推导)这个时候编译器就会去类型推导(下面未定义类型,直接赋值,声明变量并且赋值)
var num = 10.1
fmt.Printf("%T",num)
float64
第三种∶省略var,注意∶=左侧的变量不应该是已经声明过的,否则会导致编译错误
var name string
name = "tom"
name := "tom"
fmt.Printf("%T %s",name,name)
string tom
上面就声明变量的时候同时赋值了。
(3)该区域的数据值可以在同一类型范围内不断变化
变量的值是可以变化的,但是有前提,要注意其作用域,其次类型不能发生变化。
(4)变量在同一个作用域内(简单理解在函数或者代码块里面)不能重名,不同的作用域是可以重名字的
(5)变量 = 变量名 + 数据类型 + 值,这一点请大家注意
(6)Golang 的变量如果没有赋初值,编译器会使用默认值,比如 int默认值0,string默认值为空
串,小数也是默认为0的。
变量的声明,初始化和赋值
声明变量
基本语法∶var 变量名 数据类型
var a int 这就是声明了一个变量,变量名是 a
var num1float32 这也声明了一个变量,表示一个单精度类型的小数,变量名是num1
初始化变量
在声明变量的时候,就给值。var a int= 45 这就是初始化变量a
使用细节∶ 如果声明时就直接赋值,可省略数据类型 var b = 400
给变量赋值
比如你先声明了变量∶var num int
然后,再给值 num=780,这就是给变量赋值
变量赋值
与其他主要编程语⾔如java c++ 的差异
- 赋值可以进⾏⾃动类型推断,可以不声明变量类型
- 在⼀个赋值语句中可以对多个变量进⾏同时赋值,可以大大简化代码
交换两个变量的值最常见的就是引入一个中间变量,go语言可以在一个语句里面对多个变量赋值
var a,b int = 1,2
var a,b = 1,"2"
a,b := 2,4
func TestExchange(t *testing.T){
a := 1
b := 2
a,b = b,a
t.Log(a,b)
}
=== RUN TestExchange
my_test.go:149: 2 1
--- PASS: TestExchange (0.00s)
PASS
指针类型变量
与其他主要编程语⾔的差异
d := 1
dPtr := &d
fmt.Printf("%p,%T\n",dPtr,dPtr)
0xc000108010,*int
不支持指针的运算,在很多语言当中通过指针自增来访问连续的存储空间。但是在go语言里面是不支持指针运算的。
dPtr = dPtr + 1
类型转化
与其他主要编程语⾔的差异
type mytype int
var b int
fmt.Printf("%v,%v\n",reflect.TypeOf(a),reflect.TypeOf(b))
b = int(a)
main.mytype,int