19 数组与切片之切片的基本用法

在上一篇中,我们讨论了数组的定义与操作,了解了如何创建固定大小的数组和如何对数组进行基本的操控。本篇将深入探讨切片的基本用法,切片是 GO 语言中一个十分灵活且强大的数据结构。

什么是切片?

切片(Slice)是 Go 语言中的一个重要概念,它是一种动态大小的数组。与数组相比,切片在大小上具有更大的灵活性,可以根据需要动态增加或减少元素。切片的实际底层是一个数组,切片通过引用这一数组来实现它的功能。

切片的基本定义

在 Go 中,定义切片的语法看起来如下:

1
var s []int // 定义一个整型切片

这里的 s 是一个没有初始化的切片,初始值为 nil

切片的声明与初始化

切片可以通过多种方式进行声明和初始化,下面我们来看几种常用的方式。

  1. 使用 make 函数创建切片

make 函数可以用于创建切片,语法如下:

1
s := make([]int, 5) // 创建一个长度为 5 的整型切片,初始值为 0
  1. 直接初始化切片

可以在声明时直接为切片赋值:

1
s := []int{1, 2, 3, 4, 5} // 创建并初始化一个整型切片
  1. 利用数组创建切片

我们也可以从一个已有数组中创建切片:

1
2
arr := [5]int{1, 2, 3, 4, 5}
s := arr[1:4] // 创建一个切片,包含 arr 的索引 1 到 3 的元素

切片的操作

对于切片,我们可以进行各种基本的操作,比如获取元素、修改元素、追加元素等。

获取和修改切片元素

获取和修改切片的元素与数组类似:

1
2
3
4
s := []int{1, 2, 3, 4, 5}
fmt.Println(s[0]) // 输出 1
s[1] = 10 // 修改第二个元素
fmt.Println(s) // 输出 [1 10 3 4 5]

追加元素到切片

Go 提供了 append 函数用于向切片追加元素:

1
2
3
4
5
s := []int{1, 2, 3}
s = append(s, 4) // 向切片添加一个元素
fmt.Println(s) // 输出 [1 2 3 4]
s = append(s, 5, 6) // 可以一次追加多个元素
fmt.Println(s) // 输出 [1 2 3 4 5 6]

需要注意的是,append 函数可能会导致底层数组的重新分配,这种情况下新的切片将指向一个新的数组。

切片的切片

你可以在切片上再次执行下标操作,从而获取子切片。例如:

1
2
3
s := []int{1, 2, 3, 4, 5}
subSlice := s[1:4] // 获取切片 s 的子切片
fmt.Println(subSlice) // 输出 [2 3 4]

切片的遍历

切片支持 for 循环遍历:

1
2
3
4
s := []int{1, 2, 3, 4, 5}
for i, v := range s {
fmt.Printf("Index: %d, Value: %d\n", i, v)
}

切片长度和容量

切片有两个重要的属性:长度(length)和容量(capacity)。长度是切片中当前元素的数量,而容量是切片底层数组的长度。

使用内置函数 len()cap() 可以获取切片的长度和容量:

1
2
3
s := []int{1, 2, 3, 4, 5}
fmt.Println("Length:", len(s)) // 输出 Length: 5
fmt.Println("Capacity:", cap(s)) // 输出 Capacity: 5

当切片的长度等于其容量时,追加更多元素会导致 Go 自动分配更大的底层数组。

总结

在本篇文章中,我们详细讨论了切片的基本用法,包括其定义、初始化、基本操作及遍历等。切片为我们提供了比数组更灵活的数据处理能力,使得我们在编程时可以更加方便地处理动态数据。

在下一篇中,我们将探讨 Go 语言中与切片相关的内置函数,让我们一起深入理解这些强大的工具吧!

19 数组与切片之切片的基本用法

https://zglg.work/go-zero/19/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-11

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论