A, 数组是固定长度的,所以在创建时要指明长度,而切片长度是可变的,创建时不用标明长度,比如:
数组: d1 := [...]int{1, 2, 3}
切片: d2 := []int{1,2,3}
B, 数组的操作是传值的,有拷贝动作,切片的操作实质是指针操作。如下:
a := [5]int{1, 2, 3, 4, 5}
b := a
b[1] = 0
c := []int{}
c = a[:]
c[2] = 9
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
结果:
[1 2 9 4 5]
[1 0 3 4 5]
[1 2 9 4 5]
b:=a其实是复制了一份a给b,所以修改b不影响a。c=a[:]是将a的地址传给了c,所以可以看到结果a和c是联动的。
总结:切片是引用,必须要基于实体即内存。这个实体可以是数组,也可以是用make(type, len, cap)创建的一块类似数组的内存。
有疑问加站长微信联系(非本文作者)