Golang 切片综合指南
文章插图
在这篇文章中 , 我们将复习「切片」的概念 , 它是 Golang 中一个重要的数据结构 , 这一数据结构为你提供了处理与管理数据集合的方法 。 切片是围绕着动态数组的概念构建的 , 它与动态数组相似 , 可以根据你的需要而伸缩 。
- 就增长而言 , 切片是 动态 的 , 因为它们有自己的内置函数 append, 可以快速高效地增长切片 。
- 你还可以通过切割底层内存来减少切片的大小 。
- 在底层内存中切片是在连续的块上分配的 , 因此切片为你提供的便利之处包括:索引、迭代与垃圾回收优化 。
- 切片不存储任何数据 , 它仅描述底层数组的一部分 。
- 切片使用一个包含三个字段的结构表示:指向底层数组的指针(pointer)、长度(length)与容量(capacity) 。
- 这个数据结构类似于切片的描述符 。
文章插图
- 指针(Pointer): 指针用于指向数组的第一个元素 , 这个元素可以通过切片进行访问 。 在这里 , 指向的元素不必是数组的第一个元素 。
- 长度(Length): 长度代表数组中所有元素的总数 。
- 容量(Capacity): 容量表示切片可扩展的最大大小 。
文章插图
// 使用长度声明一个切片 。 创建一个整型切片 。 // 长度和容量均为 5 。 slice := make([]int, 5)fmt.Println(len(slice)) // 打印结果 5fmt.Println(cap(slice)) // 打印结果 5
使用长度和容量声明一个切片在声明切片过程中 , 当你分别指定长度(Length)和容量(Capacity)时 , 这将初始化一段无法访问的底层数组来创建一个具有可用容量的切片 。/*使用长度和容量声明一个切片 创建一个整型切片 。长度为 3 , 容量为 5。 */slice := make([]int, 3, 5)fmt.Println(len(slice)) // 打印结果 3fmt.Println(cap(slice)) // 打印结果 5
文章插图
但请注意 , 尝试创建容量小于长度的切片是不允许的 。
使用切片字面量创建切片创建 切片 的惯用方法是使用 切片字面量。 它与创建数组相似 , 只是它不需要在 [ ] 操作符中指定值 。 你初始化切片时所用元素的数量将决定切片的初始长度与容量 。
// 创建字符串类型切片 。 // 长度与容量均为 5 。 slice := []string{"Red", "Blue", "Green", "Yellow", "Pink"} fmt.Println(len(slice)) // 打印结果 5fmt.Println(cap(slice)) // 打印结果 5// 创建一个整型切片 。 // 长度与容量均为 3 。 intSlice:= []int{10, 20, 30}fmt.Println(len(intSlice)) // 打印结果 3fmt.Println(cap(intSlice)) // 打印结果 3
声明一个带有索引位置的切片当使用切片 字面量 时 , 你可以初始化切片的 长度 与 容量。 你所需要做的就是初始化表示所需长度和容量的 索引。 下面的语法将创建一个长度和容量均为 100 的切片 。// 创建字符串类型切片 。 // 用空字符串初始化第 100 个元素 。 slice := []int{99: 88}fmt.Println(len(slice)) // 打印结果 100fmt.Println(cap(slice)) // 打印结果 100
文章插图
- 聚焦创新核心资源 环华西健康产业一体化综合科技创新服务平台“上线”
- 中国电信5G+AR智慧商业综合体,引领时尚生活新潮流
- 平湖智慧城管让城市管理“耳聪目明”
- 海关|5G+AR技术 实现综合保税区远程监管
- 腾讯视频王娟:综合视频平台是我们未来的发展方向
- 珠海海事局携手华为促海岛雷达站综合供能绿色转型
- 抄github上的golang代码被坑后,弄懂了gin的原理
- 哪个会是你的菜?石头T7和石头T7 Pro综合大比拼
- Go 切片的一种有趣内存泄漏方式
- 明明可以靠口碑,却依然不放弃综合体验,荣耀真用心