golang-变量,值类型与引用类型

变量

Go中使用全新的关键字var来声明变量,属于强类型,在声明变量后就不允许改变其数据类型。

var a int  //声明一个int类型的变量


var (  结构体// 同时声明多个变量
    a int
    b bool
)

var a,b,c int // 同时声明多个变量


var a = 1 // 声明变量的同时赋值,编译器自动推导其数据类型

tips,关于 a := 1 这种方法与 var  a = 1 效果相同,可以不书写类型,编译时会根据value自动推导类型进行匹配,但是但是,这种写法只能在函数体中使用。:= 此符号是海象运算符

 

几个需要注意的地方:

  1. 使用海象赋值法对float类型进行赋值时,正确的写法---v1 := 3.0,错误的写法---v1 := 3。
  2. 当不知道某个变量应该大写还是小写时,用小写。因为都用大写最后项目整体会变大。
  3. 如果要使用go全局类型的变量,一定一定要注意它不为空,否则很多地方会出现panic。
  4. 局部变量声明但是不使用会报错,但是全局变量声明不使用不会报错。
  5. 已经声明的变量不允许被重新声明,但可以被重新赋值。
  6. go全局变量在init之前执行。全局变量先执行声明并赋值后,保证了导入该包后可以直接使用这个全局变量

 

 

go的值类型与引用类型

所有像 int、float、bool 和 string ,数组,struct这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值

当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝可以通过 &i 来获取变量 i 的内存地址,例如:0xf840000040(每次的地址都可能不一样)。值类型的变量的值存储在栈中。内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机器可能有不同的存储器布局,并且位置分配也可能不同。

 

ptr,函数,映射,slice,map,chan更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。

一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(不是具体的值),或内存地址中第一个字(比如切片)所在的位置。

这个内存地址为称之为指针,这个指针实际上也被存在另外的某一个字中。同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。

当使用赋值语句 r2 = r1 时,只有引用(地址)被复制,见下图。

 

值类型与引用类型在当作参数进行传递时,会有很大的不同,后面会有介绍。

 

如果对你有帮助,可否在文章右侧点个赞再走呢~~

 

本文为原创,转载请注明出处

 

文章目录

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章