Go 切片

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


切片是一种数据结构,这种数据结构便于使用和管理数据集合
切片是动态围绕数组的概念构建的,可以按需自动增长和缩小

切片的自动增长是通过内置函数append 实现的,这个函数可以快速高效的增长切片
还可以对切片再次切片减小一个切片的大小,因为切片在内存中也是连续的存储块,所以切片还可以获取索引、迭代和垃圾回收优化的好处

1.内部实现

切片是一个对底层数组抽象的一个很小的对象
包含3个字段的数据结构:指针、长度、容量

2.创建和初始化

a. make和切片字面量

使用make时需要传入一个参数指定切片的长度
如果只指定长度,则切片的长度和容量相等,也可以分别指定长度和容量(容量>长度)
初始化之后并不能访问所有的元素,只能访问长度内的元素,超出其长度但在容量之内的元素无法访问,这些元素后期可以整合到切片中

// 创建一个容量和长度都是5的字符串切片
slice := make([]string, 5)

// 创建一个长度为3 容量为5 的个元素的整形切片
slice_1 := make([]int, 3, 5)

切面字面量

// 创建长度和容量都是5的字符串切片
slice_2 := []string{
   "apple", "banana", "orange"}

// 创建指定长度和容量(50)的切片
slice_3 := []int{
   49:0}

// 输出结果:
// == slice_2 :  [apple banana orange]

[]运算符内指定数值的时候,创建的就是数组;
不指定的时候,创建的就是切片

b. nil和控空切片

nil切片
只要在声明时不做任何初始化就是nil切片

通常用于描述一个不存在的切片

var slice_4 []int

空切片
空切片底层数组包含0个元素,没有分配任何存储空间
通常用于表示空集合

// 使用make声明空切片
slice_5 :=make([]int, 0)

// 使用字面量创建空切片
slice_6 := []int{
   }

// 输出结果:
// == slice_5 :  []
// == slice_6 :  []

nil 和 空切片其内部调用append、len 和 cap 效果是一样的

3. 切片的使用

a. 赋值和切片

通过索引可以使用[]运算符赋值及查询切片

// 创建切片
slice_7 := []int{
   1,2,3,4,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值