go语言之make

本文探讨Go语言中make函数在slice、map和chan上的应用。特别指出,make后设置slice大小会在内部填充空数据,append操作不会覆盖已有元素,并详细解释了slice扩容的规则。同时提到,map在使用make时指定的len无效,不约束其大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 对于make来说,是Go语言之用来分配内存的函数,使用在slice,map,chan这三种数据类型上面。因为这三种数据类型的特殊性,用来分配和初始化这三种数据类型

make的语法结构非常简单,如下所示:

make(type, len, cap) 

使用make常见的一些坑

1.slice使用make

        注意:slice在make了之后,设置了slice的大小之后,实际上是在slice里面添加了len个空数据,如果在使用append来操作的话,相当于在slice后面添加新的元素,例子如下:

运行结果为:

 注:当使用append往slice里面加元素时,时长度大于容量,这时切片就会发生扩容,扩容原理为:

  •  cap :需要的容量
  • old.cap:旧切片的容量
  • newcap :最终要申请的容量
  • doublecap : old.cap的两倍

  • 当需要的容量cap大于两倍旧容量doublecap时,我们申请的新容量就是需要的容量 ...当需要的容量帽大于两倍旧容量倍瓣时,我们申请的新容量就是需要的容量
  • 当需要的容量cap小于两倍旧容量doublecap时,判断是否旧切片的长度小于1024,如果小于1024,那么newcap=两倍旧cap,直接翻倍 ...当需要的容量小于两倍旧容量Doublecap时,判断是否旧切片的长度小于1024,如果小于1024,那么NewCap=两倍旧,直接翻倍
  • 当旧切片的长度>=1024时,会反复地增加25%,直到新容量newcap超过所需要的容量cap。其中newcap > 0是防止int类型溢出,如果溢出那么就直接newcap = cap(需要的容量) 。当旧切片的长度>=1024时,会反复地增加25%,直到新容量newcap超过所需要的容量cap。其中newcap > 0是防止int类型溢出,如果溢出那么就直接newcap = cap(需要的容量)

2.map使用make

       注意:map在使用make的时候,就算指定了len,也是不起作用的,这个len起不到限制的作用。如:

 

结果为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值