数组与切片的概念在其它语言中也有,之前我是没有搞明白他们之间的关系的。今天做了下总结
区别:数组是值类型,切片是引用类型,在使用的时候有区别。 如果用一个数组A创建新数组B的时候,需要将A中的所有元素全部复制一遍过去。如果是切片的话,就会指向原来的数据。
数组赋值拷贝见下面例子
func main() {
var a [10]int = [10]int{1, 2, 3}
b := a
b[0] = 2
fmt.Printf("%d,%d", (int)(a[0]), (int)(b[0]))
}
输出的结果 1,2
创建过程也不同:
数组的创建使用 = []type{}创建,初始数据为0。
切片创建有两种,通过已经存在数组创建或者通过make创建
a := b[0:3]
a:= make([]int, 10, 20)
数组是静态不可变的,切片是动态长度可变的 make创建切片时候第三个参数就是该切片内存不够时候需要重新分配的粒度
func main() {
c := make([]int,3,5)
c = append(c,1,2,3,4)
for _, v := range c {
fmt.Printf("%d,",v)
}
fmt.Printf("\n新分配内存后切片容量%d", cap(c))
}
结果: 0,0,0,1,2,3,4,
新分配内存后切片大小10
有疑问加站长微信联系(非本文作者)