golang 值类型与引用类型
作者:互联网
值类型和引用类型
值类型包括:所有integer
,所有float
,bool
,string
,数组
和structure
引用类型包括:指针
,slice
,map
,chan
,interface
通过使用方法来区分值类型和引用类型
初始化
变量初始化分为声明和赋值两部分
var b int // b = 0 b = 1 var p *int // p = nil p = &b
对于值类型,声明了但是未赋值时,其值是类型零值,可以看出值类型变量存的就是变量的值
对于引用类型,声明了但是未赋值时,其值是nil
, 可以看出引用类型变量存的是变量的指针
slice
、map
、channel
都是结构体,指针零值是nil
代表它还没有存储任何一个内存地址 ,而slice
等的零值是成员变量为相应变量类型零值的slice
结构体,
为了更方便初始化slice
、map
和channel
结构体,golang设计者设计了一个make
函数,专门用来初始化slice
、map
和channel
但是为什么
slice
、map
和channel
也叫引用类型?
回到那句话,区分引用类型和值类型是在使用的时候区分,这三种类型的成员变量都包含一个指向我们存储的值的指针 ,操作我们存储的值的时候必须通过这个指针来操作,所以它们是引用类型
函数传参
无论是值类型还是引用类型,传递的都是这个变量存储值的一个副本
func f(i int, p *int){ // i是原始变量值的一个副本,i存储的值与原始变量值相等 // 操作i=1并不会使原始变量值变成1 // p是原始变量值的一个副本,它们存储了相同的指针,指向同一个地址 // 操作 *p = 1 会使原始变量指向的值变成1 // 操作 p = &i 会使p指向i,但是对原始变量没有影响 }
标签:slice,变量,E5%,golang,引用,类型,指针 来源: https://www.cnblogs.com/fulaien/p/16610207.html