引用类型:
指针,slice,map,chan,interface等都是引用类型 特点:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配,通过GC回收。
指针类型例子
package main
import "fmt"
func main() {
name := "无尘"
modify1(name)
fmt.Println("name的值为:", name)
modify2(&name)
fmt.Println("name的值为:", name)
}
func modify1(name string) { //值类型
name = "wucs"
}
func modify2(name *string) { //指针类型
*name = "wucs"
}
//运行结果:
//name的值为: 无尘
//name的值为: wucs
引用类型例子
下面以map为例
package main
import "fmt"
func main() {
m:=make(map[string]int)
m["无尘"] = 18
fmt.Println("无尘的年龄为",m["无尘"])
modify(m)
fmt.Println("无尘的年龄为",m["无尘"])
}
func modify(p map[string]int) {
p["无尘"] =20
}
//运行结果:
//无尘的年龄为 18
//无尘的年龄为 20
说明:
通过上面例子,可以发现无论是指针类型还是引用类型,都可以,函数内部都可以修改函数外部变量的值,都可以高效传递参数,但是使用方式上有所差别,指针有专用的指针操作符,引用类型跟普通变量差不多。