• [Go] 理解切片slice扩容


    切片有个长度和容量两个参数 , 当长度超过容量的时候 , 容量会扩容2倍

    当容量大于1024个的时候,容量会扩容为原来的1.25倍

    从下面的代码中可以看得到

    当增加新的元素的时候,超过了容量,但是容量大小小于1024的时候 , 是2倍扩容

    当新增元素 , 超过了容量 , 并且容量大于1024 , 是1.25倍扩容

        //数组
        arr := [4]int{1, 2, 3, 4}
        arrSlice := arr[:]
        log.Printf("长度:%d,容量:%d
    ", len(arrSlice), cap(arrSlice))
        //容量超过 ,扩容2倍 4*2=8
        arrNewSlice := append(arrSlice, 5)
        log.Printf("长度:%d,容量:%d
    ", len(arrNewSlice), cap(arrNewSlice))
    
        var arr2 = [1024]int{}
        for i := 0; i < 1024; i++ {
            arr2[i] = i
        }
        log.Printf("长度:%d,容量:%d
    ", len(arr2[:]), cap(arr2[:]))
        //容量超过1024 ,扩容问1.25倍 1024*1.25=1280
        arr2NewSlice := append(arr2[:], 1024)
        log.Printf("长度:%d,容量:%d
    ", len(arr2NewSlice), cap(arr2NewSlice))

    输出:

    2021/05/08 18:18:27 长度:4,容量:4
    2021/05/08 18:18:27 长度:5,容量:8


    2021/05/08 18:18:27 长度:1024,容量:1024
    2021/05/08 18:18:27 长度:1025,容量:1280

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    jstat命令-帮助优化java性能
    使用nginx搭建简单文件服务器
    JVM初探
    fastDFS shiro权限校验 redis FreeMark页面静态化
    spring AOP
    Java多线程并发
    js插件之Ocupload
    Jquery总结
    shell
    Linux(二)
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14746084.html
Copyright © 2020-2023  润新知