golang中数组和切片的区别

golang中数组和切片的区别

数组:array1 := [3]int{1,2,3}
切片 :array2 := []int{1,2,3} 这种只能append
切片可以直接append res := append(array2,10)

但是切片想要这样赋值
array2[3] = 20就会报错因为没有分配内存空间,所以此时需要make

array3 := make([]int,10)
array3[3] = 20 这样旧可以赋值了
注意这里
array3 := make([]int,10)
array3[11] = 20 这样可以吗?会报错,这是因为定义的长度是10,所以给第11个位置的时候就会报错,此时怎么办
此时旧需要append了,用append会自动扩容

判断数组是否相等用
if shu1 == shus2就可以
切片需要用reflect.DeepEqual(slice1,slice2)

总结: 1、只有切片才可以append
2、数组可以直接赋值,但是要在指定的长度内赋值,超出范围会报错
3、切片可以直接append,但是赋值需要make后才可以,切片指定大小后,赋值也不能超过范围,超过范围用append

在这里插入图片描述
在这里插入图片描述

注意:数组是值拷贝,切片和map是引用传递,如果想重新复制一份,用copy

总结:数组是值拷贝 切片是引用指向同一个数组的地址,但是如果用copy函数的话,就相当于把切片重新复制一份,指向的就不是一个数组了
在这里插入图片描述
a := make(map[int]string,8) 第二个参数代表容量,之前切片第二个元素是长度,第三个参数是容量
fmt.Println(len(a))//正确
fmt.Println(cap(a))//错误
map是不能直接用cap去获取容量的

猜你喜欢

转载自blog.csdn.net/weixin_37509194/article/details/109038287