美文网首页golang 编程笔记
【golang】slice必知必会

【golang】slice必知必会

作者: dongzd | 来源:发表于2020-03-14 10:59 被阅读0次

slice数据结构

type slice struct {
    array unsafe.Pointer //指向引用数组指针
    len   int //长度
    cap   int // 容量
}

slice扩容逻辑

1.如果slice容量足够容纳新增的元素,那么不会扩容。
2.如果新增元素后容量不足,则会扩容为原容量的 2 倍大小,如果原 slice 容量大于1024,那扩容后的容量等于每次扩容前增加 1/4。同时将原来的数据拷贝到新的数组中,所以还是要合理使用扩容。

易错点

1.slice在扩容后会重新开辟一片内存地址,将原先值拷贝到新的地址,再次修改slice将不会影响原先的slice
2.slice当作参数传递时,虽然是值传递,但是其内部结构存在指针,指向的还是同一个数组引用,所有函数内部改变slice会影响原先值

slice的两种声明方式

var a []int
a:=make([]int,0)

其中第一个声明后,是Nil Slice,第二个声明后,是Empty Slice
1.Nil Slice:代表不存在的slice
2.Empty Slice:代表存在的空数组地址

相关文章

网友评论

    本文标题:【golang】slice必知必会

    本文链接:https://www.haomeiwen.com/subject/dcmmshtx.html

    热点阅读