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是一样的。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐