GO语言基础教程(54)Go复合数据类型之切片:Go切片:程序员的“无限手套”,掌握它就能掌控数据!

在Go语言的世界里,切片就像是一双无限伸缩的数据手套,让你优雅地掌控动态数据集合。

01 切片基础:为何它比数组更受欢迎?

在Go语言中,数组是一个固定长度的序列,而切片则是对底层数组的动态引用。可以把切片想象成一个可以自动扩缩容的智能数组,它知道当前使用了多少空间,还有多少空间可供使用。

切片的数据结构包含三个关键字段:指向底层数组的指针、切片的长度(当前元素数量)和切片的容量(从切片起始位置到底层数组末尾的元素数量)。

简单来说,长度表示切片当前有多少元素,容量表示切片最大可以容纳多少元素,容量永远大于或等于长度。

与数组不同,切片是引用类型,这意味着当你将一个切片赋值给另一个变量时,两个变量会引用同一个底层数组。这种设计极大地提高了数据传递的效率,特别是在处理大量数据时。

那么,在实际编程中如何创建和使用切片呢?让我们一起来探索几种常见的方法。

02 创建切片:多种方法任你选择

Go语言提供了多种创建切片的方式,每种方法都有其适用场景。

直接声明切片

最简单的方式是直接声明一个切片:

var slice []int
fmt.Printf("长度:%d\n", len(slice)) // 0
fmt.Printf("容量:%d\n", cap(slice)) // 0
fmt.Println(slice) // []

这种方式只是声明了切片,并未初始化,slice的值为nil。在实际使用前,你需要使用append函数添加元素或使用make函数分配空间。

使用make函数创建切片

make函数是创建切片的常用方法,它允许你指定切片的初始长度和容量:

// 创建一个长度为3,容量为5的整数切片
slice := make([]int, 3, 5)
fmt.Printf("slice=%v, len=%d, cap=%d\n", slice, len(slice), cap(slice))
// 输出:slice=[0 0 0], len=3, cap=5

如果省略容量参数,容量会默认与长度相同:

slice := make([]int, 5)
fmt.Printf("长度:%d, 容量:%d\n", len(slice), cap(slice))
// 输出:长度:5, 容量:5

使用make函数创建切片时,系统会自动初始化所有元素为类型的零值,这对于后续操作非常安全。

使用切片字面量创建

当你已经知道切片的初始元素时,可以使用切片字面量直接创建:

slice := []int{1, 2, 3, 4, 5}
fmt.Printf("长度:%d, 容量:%d, 值:%v\n", len(slice), cap(slice), slice)
// 输出:长度:5, 容量:5, 值:[1 2 3 4 5]

这种方式既直观又简洁,是代码中最常见的切片创建方式之一。

从数组或现有切片创建

通过“切片”操作可以从数组或现有切片创建新切片:

arr := [10]int{0, 23, 14, 56, 89, 65, 32, 14, 10, 23}
slice1 := arr[0:5]    // 包含元素0到4
slice2 := arr[:3]     // 包含元素0到2
slice3 := arr[7:]     // 包含元素7到9
slice4 := arr[:]      // 包含所有元素

fmt.Printf("slice1: %v\n", slice1) // [0 23 14 56 89]
fmt.Printf("slice2: %v\n", slice2) // [0 23 14]
fmt.Printf("slice3: %v\n", slice3) // [14 10 23]
fmt.Printf("slice4: %v\n", slice4) // [0 23 14 56 89 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值