当前位置:   article > 正文

goland创建一个不限长度的字节切片_关于Go切片,看这篇就够了

go 切片不指定长度
5fc8c750d0b8e985149b0de35918e3c6.png

这个一篇关于Go切片的文章,应该能满足你 99%的Go切片的使用场景

01.

切片的内部实现和基础功能

切片是围绕着动态数组的概念来构建的,它跟数组类似,是用于管理数据集合的一种数据结构。

数组一旦创建就不能更改其长度和类型,而切片就不同,切片可以按需自动增长和缩小,增长一般使用内置的 append 函数来实现,而缩小则是通过对切片再次进行切割来实现。

切片内部实现

切片对底层数组进行了抽象,并提供相关的操作方法,其内部包含3个字段:指向底层数组的指针、切片访问的元素的个数(即长度)、切片运行增长到的元素个数(即容量)。

43ed8ddbc81d98efd428bb31aeb12a06.png

02.

切片的创建与初始化

切片的创建有两种方式:一种是使用 make 函数来创建,另一种是使用字面量方式创建。

// 使用 make 函数创建切片// var 切片变量 = make([]类型, 长度, 容量)var slice = make([]int, 55)

make 函数声明切片时,第二个参数必填,但第三个参数可以不填,不写第三个参数时,其容量默认等于长度值,但是如果指定容量,那容量一定不能小于长度。

以下两种方式声明是等价的。

// 以下两种声明方式是等价的// 方式1var slice = make([]int, 5)// 方式2var slice = make([]int, 5, 5)

声明并初始化切片时,可以指定所有的元素,也可以只初始化部分元素,此时需要指定要初始化的元素索引。

  1. // 声明并初始化切片// 在声明切片时,指定切片所有元素var slice = []int{
  2. 123}// 初始化部分元素// 初始化索引为1的元素为1,索引26, 索引510var slice = []int{
  3. 1:12:65:10}

使用字面量声明切片时,有两种特殊情况:一是空切片,二是 nil 切片。

这两种情况创建出来的切片,其长度为0,是不能直接通过下标的方式来赋值的。

// 使用字面量声明切片// 情况一:空切片// 切片的元素值是切片类型的零值,即 int 0string '', 引用类型 nilvar slice = []int{}// 尝试赋值会报错:runtime error: index out of range [0] with length 0slice[0= 1// 情况二:nil 切片var slice []int// 尝试赋值会报错:runtime error: i
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/206369
推荐阅读
相关标签
  

闽ICP备14008679号