美文网首页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

        热点阅读