数组传递的是数据的拷贝,而切片传递的是引用,切片本身不包含任何数据。它仅仅是底层数组的一个上层表示。对切片进行的任何修改都将反映在底层数组中。
eg:
func main(){
array :=[...]int{1,2,3}
//赋值给arrayCopy
arrayCopy:=array
arrayCopy[0]=8
fmt.Println(array,arrayCopy) //[1 2 3] [8 2 3]
//切片
splice:=[]int{1,2,3}
//赋值给spliceCopy
spliceCopy:=splice
spliceCopy[0]=8
fmt.Println(splice,spliceCopy) //[8 2 3] [8 2 3]
}
可以看到改变数组的拷贝arrayCopy不会改变array中的数据,而改变切片的拷贝spliceCopy,splice也改变了。
可以看出数组是值拷贝而切片是引用。
mapmap[keyType]valueTye
Golang中,map是引用类型,如切片一样,通过下面的代码声明后指向的是nil,所以千万别直接声明后就使用,新手可能经常会犯如下错误:
var m map[string]string
m["name"]="小明"//异常 panic: assignment to entry in nil map
make
m:=make(map[string]string)
m["name"]="小明"
fmt.Println(m["name"])//小明
删除元素
delete(m,"name")
fmt.Println(m)//map[]