Go切片「slice」的介绍

本文介绍了Go语言中的切片,解释了切片的三个参数:len、cap和ptr,并通过代码示例展示了切片的创建,包括直接创建和通过数组创建。此外,讨论了切片与数组的关系,以及使用append()和copy()函数时切片的变化情况。文章还探讨了何时切片的改变会影响数组,以及如何通过切片创建新的切片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前面的文章中,我们简单的介绍了数组,但没说数组的缺点是什么?数组有个缺点就是初始化之后数组的长度就固定了,不能改变。但有时,我们不能在一开始就很精确的知道,我们要存储多少个元素,这样的话,对初始化数组的时候,就不好去给定个初始长度,给少了不行,给太多了又很浪费。

在Go中,我们可以使用它给我们提供的slice(切片),可以不用关心初始化数组长度这个问题。

什么是切片?

切片中有3个参数

  • len:表示切片当前可存储元素的个数
  • cap:表示切片最大可存储元素的个数
  • ptr:存储的是指向数组的指针(可以看做是存储了数组)

注:len <= cap

切片不是数组,但切片中有个指向数组的指针,是专门用来引用数组的,所以切片是什么?我觉得切片是一个引用了数组的结构体。

在这里插入图片描述

切片的创建

直接创建切片

// len代表了切片的长度,cap代表了切片的容量
make([]类型, len, cap)

// len = cap,只要填一个参数,就同时指代了len和cap
make([]类型, (len = cap))
代码示例
slice := make([]int, 6, 15)
fmt.Println("切片的长度:", len(slice), "切片的容量:", cap(slice))

输出

切片的长度: 6 切片的容量: 15

slice := make([]int, 6)
fmt.Println("切片的长度:", len(slice), "切片的容量:", cap(slice))

输出

切片的长度: 6 切片的容量: 6

通过数组创建切片

注:[左:右),表示数组在转成切片的时候,包左不包右,看下面代码理解这个包左不包右的意思

值1:表示从哪个位置开始切

值2:表示截止切的位置,可以从这个知道len的长度:len = 值2 - 值1

值3:表示切片的容量为:cap = 值3 - 值1

变量名 := 数组[值1:值2:值3]
代码示例
a := [10]int{
   
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice := a[2:6:8]
fmt.Println("切片的长度为:", len(slice), "\n切片的容量为:", cap(slice), "\n切片的值为:", slice)

输出

切片的长度为: 4 
切片的容量为: 6 
切片的值为: [2 3 4 5]

len = 冒号右边的值 - 冒号左边的值

cap = 数组的长度 - 冒号左边的值

左边不填就是0,右边不填就是数组长度

变量名 := 数组[值1:值2]
a := [10]int{
   
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice := a[2:7]
fmt.Println("切片的长度为:", len(slice), "\n切片的容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值