数组传递的是数据的拷贝,而切片传递的是引用,切片本身不包含任何数据。它仅仅是底层数组的一个上层表示。对切片进行的任何修改都将反映在底层数组中。

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也改变了。

可以看出数组是值拷贝而切片是引用。

map
map[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[]