欢迎光临散文网 会员登陆 & 注册

Go语言基础 切片使用

2022-04-26 14:28 作者:后端攻城狮哇  | 我要投稿

Go 中常用的容器

Golang 中以标准库的方式提供了常用的容器实现,基本能够满足我们日常开发的需要。我们来具体学习下 Go 数组的使用。

切片

切片是对数组一个连续片段的引用,它是一个容量可变的序列。我们可以简单将切片理解为动态数组,它的内部结构包括底层数组指针、大小和容量,它通过指针引用底层数组,把对数据的读写操作限定在指定的区域内。

切片的结构体由三部分组成:

  • array 是指向底层存储数据数组的指针;

  • len 指当前切片的长度,即成员数量;

  • cap 指当前切片的容量,它总是大于等于 len

我们可以从原有数组中生成一个切片,那么生成的切片指针即指向原数组,生成的样式如下:


source表示生成切皮的原有数组,begin 表示切片的开始位置,end 表示切片的结束位置,不包含 end 索引指向的成员。具体效果如下例子所示:


输出的结果为:

在这个切片内,我们仅能访问长度内的值,如果访问的下标超过了切片的长度,编译器将会抛出下标越界的异常。如果此时我们对切片内的成员进行修改,因为切片作为指向原有数组的引用,对切片进行修改就是对原有数组进行修改,如下例子所示:


结果如下所示:


上面例子中我们修改了切片中的值,直接导致原数组中的值也发生了变化。

我们也可以通过 make 函数动态创建切片,在创建过程中指定切片的长度和容量,样式如下所示:


T 即切片中的成员类型,size 为当前切片具备的长度,cap 为当前切片预分配的长度,即切片的容量。例子如下所示:

输出的结果如下:

从上述输出可以看到 make 函数创建的新切片中的成员都被初始化为类型的初始值。

切片本质就是一个结构体,他里面包含三部分:address + len + cap,因此作为一个引用空间,该空间和元素空间完全是两个空间,所以切片的首地址和头号元素的首地址完全不同。

Go语言基础 切片使用的评论 (共 条)

分享到微博请遵守国家法律