golang中使用make初始化slice切片时的len切片长度和cap切片容量的区别和注意事项

golang中我们在初始化一个切片时需要使用make内置函数来对切片进行初始化和分配内存空间的工作。

make参数len和cap的区别

make函数中的第二个参数 len 表示数据长度, 而 第3个参数cap表示slice的容量,即这个slice最多可存放的数据量。

如: make([]int, 0, 10)  这里的 0 就是切片长度len,0 表示暂无数据,  10 表示的是切片的容量 cap ,  表示这个切片最多只能放多少个数据。

越界异常实例:

Slice注意事项:

1. 虽然go中的slice切片可以动态扩容,但是由于他底层仍然是数组,所以slice在定义后还是不能越界使用了;

2. slice借助 append 函数自动扩容后变成动态数组

3. go语言的slice切片在每次使用append函数在底层都会自动生成一个新的数组(大小由编译器底层根据当前的数据量来控制)并将其引用返回, slice是引用类型

4.  如果可能,则应该尽可能的减少append的使用次数;

5. 如果定义的切片是用于从Reader中读取数据,则在定义时len必须为0(如果不为0,则在你读取的数据中就会有N个无意义零值存在), cap为你想要读取的数据的长度, 如果你在初始化时len和cap设置了一样的值,则你是无法从Reader中读取数据的。

6. 默认情况下make初始化时的cap如果不指定,则和len是一样的。

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值