go语言基础3(切片)|青训营 笔记

103 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第5天。

7)切片

从数组或切片生成新的切片拥有如下特性:

  • 取出的元素数量为:结束位置 - 开始位置;

  • 取出元素不包含结束位置对应的索引,切片最后一个元素使用 slice[len(slice)] 获取;

  • 当缺少开始位置时,表示从连续区域开头到结束位置;

  • 当缺少结束位置时,表示从开始位置到整个连续区域末尾;

  • 两者同时缺少时,与切片本身等效;

  • 两者同时为 0 时,等效于空切片,一般用于切片复位。

  • 根据索引位置取切片 slice 元素值时,取值范围是(0~len(slice)-1),超界会报运行时错误、,生成切片时,结束位置可以填写 len(slice) 但不会报错。

从指定范围中生成切片

切片有点像C语言里的指针,指针可以做运算,但代价是内存操作越界,切片在指针的基础上增加了大小,约束了切片对应的内存区域,切片使用中无法对切片内部的地址和大小进行手动调整,因此切片比指针更安全、强大。

切片和数组密不可分,如果将数组理解为一栋办公楼,那么切片就是把不同的连续楼层出租给使用者,出租的过程需要选择开始楼层和结束楼层,这个过程就会生成切片

表示原有的切片

生成切片的格式中,当开始和结束位置都被忽略时,生成的切片将表示和原切片一致的切片,并且生成的切片与原切片在数据内容上也是一致的,代码如下:

a := []int{1, 2, 3}
fmt.Println(a[:])

重置切片,清空拥有的元素

把切片的开始和结束位置都设为 0 时,生成的切片将变空,代码如下:

a := []int{1, 2, 3}
fmt.Println(a[0:0])

直接声明新的切片

除了可以从原有的数组或者切片中生成切片外,也可以声明一个新的切片,每一种类型都可以拥有其切片类型,表示多个相同类型元素的连续集合,因此切片类型也可以被声明,切片类型声明格式如下:

// 其中 name 表示切片的变量名

// Type 表示切片对应的元素类型

var name []Type