当前位置: 首页 > article >正文

Go语言切片复习记录

在Go语言中,切片(Slice)是一种非常重要的数据结构,它提供了对数组或其他切片的部分或全部元素的灵活引用和动态管理能力。切片在Go语言编程中广泛使用,其灵活性、动态性使其成为处理序列数据的首选方式。本文将对Go语言的切片进行详细解析,并通过示例来展示其使用方法。

一、切片的基本概念
切片是对数组的一个连续片段的引用,可以包含数组的全部或部分元素。切片包含三个关键要素:

指向底层数组的指针:切片内部包含指向底层数组的指针,这意味着切片本身不存储数据,而是存储对数据的引用。
长度(Length):切片当前的元素数量。
容量(Capacity):从切片起始位置到底层数组末尾的元素数量,即切片最多可以扩展到多少个元素而不必重新分配内存。
切片的结构类似于一个包含这三个要素的结构体,但其操作方式更加简洁高效。

二、切片的创建
切片可以通过多种方式创建,常见的有以下几种:

  1. 使用数组创建切片
    通过数组生成切片是常用的方法之一。使用数组的一段连续元素生成切片,可以通过指定起始和结束索引(注意,结束索引处的元素不包括在内)来实现。
package main  
  
import "fmt"  
  
func main() {  
    arr := [5]int{1, 2, 3, 4, 5}  
    slice := arr[1:3] // 创建切片,包含arr中索引为1和2的元素  
    fmt.Println(slice) // 输出:[2 3]  
}
  1. 使用make函数创建切片
    make函数用于动态创建切片,其格式如下:

slice := make([]Type, length, capacity)
Type 表示切片的元素类型。
length 表示切片的初始长度。
capacity 表示切片的容量,如果不指定,则默认为长度。

package main  
  
import "fmt"  
  
func main() {  
    slice := make([]int, 3, 5) // 创建一个长度为3,容量为5的整型切片  
    fmt.Println(slice, len(slice), cap(slice)) // 输出:[0 0 0] 3 5  
}
  1. 使用切片字面量创建切片
    切片也可以直接使用字面量来创建,这种方式不需要显式指定切片长度和容量,Go会自动根据元素数量确定。
package main  
  
import "fmt"  
  
func main() {  
    slice := []int{1, 2, 3, 4, 5} // 创建一个包含5个元素的整型切片  
    fmt.Println(slice, len(slice), cap(slice)) // 输出:[1 2 3 4 5] 5 5  
}

三、切片操作

  1. 切片元素的访问与修改
    访问和修改切片中的元素与数组类似,使用索引进行。
package main  
  
import "fmt"  
  
func main() {  
    slice := []int{1, 2, 3, 4, 5}  
    fmt.Println(slice[2]) // 访问第三个元素,输出:3  
    slice[2] = 100         // 修改第三个元素  
    fmt.Println(slice)    // 输出:[1 2 100 4 5]  
}
  1. 切片的切片
    切片也可以基于另一个切片来创建,这种操作会生成一个新的切片,新切片共享原切片底层数组的一部分。
package main  
  
import "fmt"  
  
func main() {  
    slice := []int{1, 2, 3, 4, 5}  
    newSlice := slice[1:3] // 创建一个新的切片,包含slice中索引为1和2的元素  
    fmt.Println(newSlice)  // 输出:[2 3]  
}
  1. 切片的追加
    使用append函数可以向切片动态添加元素。如果切片空间不足,append会自动进行扩容。
package main  
  
import "fmt"  
  
func main() {  
    slice := []int{1, 2, 3}  
    slice = append(slice, 4, 5) // 向切片追加两个元素  
    fmt.Println(slice) // 输出:[1 2 3 4 5]  
}
  1. 切片的复制
    使用copy函数可以将一个切片的元素复制到另一个切片中。
package main  
  
import "fmt"  
  
func main() {  
    src := []int{1, 2, 3}  
    dst := make([]int, 3)  
    copy(dst, src) // 将src的内容复制到dst中  
    fmt.Println(dst) // 输出:[1 2 3]  
}

四、切片与数组的区别
长度:数组的长度是固定的,在声明时必须指定;切片的长度是可变的,可以根据需要动态增加或减少。
类型:数组是值类型,切片是引用类型。这意味着当数组作为参数传递给函数时,会复制一份数组;而切片作为参数传递时,传递的是对底层数组的引用。
内存:数组在内存中占用连续的空间;切片则是一个包含指针、长度和容量的结构体,更加灵活。
五、总结
Go语言的切片是一种强大而灵活的数据结构,它通过提供对底层数组的引用,实现了对序列数据的动态管理。切片的创建、操作和使用都非常直观,掌握切片的使用对于进行高效的Go语言编程至关重要。


http://www.kler.cn/news/323415.html

相关文章:

  • 面试加分必看,11道接口安全测试面试题!
  • 文件上传、amrkdown编辑器
  • 挑战Gitee仓库空间极限:Centos下自建Git Server的部署之旅
  • pdb_strand_id、asym_id 和 entity_id的相互映射
  • 将Pytorch环境打包,快速部署到另一台机器上(在没有网络,或者网络环境不好的情况下推荐使用)
  • 如何禁止电脑上某个软件运行?电脑设置禁止运行软件的4个方法速成
  • 【深度学习基础模型】去噪自编码器 (Denoising Autoencoders, DAE)详细理解并附实现代码。
  • 如何正确连接和使用滑动变阻器?
  • 信息技术网络安全政策制定
  • GO Serial 学习与使用
  • 决策树与随机森林在机器学习中的应用
  • [数据集][目标检测]猪数据集VOC-2856张
  • 一文上手Kafka【下】
  • 快速订餐:Spring Boot 点餐系统
  • 搭建本地AI聊天界面:Open WebUI与Ollama实战指南
  • 63.【C语言】再议结构体(上)
  • 算法打卡:第十一章 图论part08
  • 什么是算力?cpu+显卡吗?
  • 【JAVA-数据结构】时间和空间复杂度
  • ubuntu中通过源码安装pointnet2_ops_lib
  • 360周鸿祎为什么说大模型已成茶叶蛋?
  • html+css+js实现Progress 进度条
  • 差速轮纯跟踪算法
  • 设备管理平台-支持快速开发
  • Woocommerce怎么分类显示产品?如何将Shopify的产品导入到Woocommerce?
  • 如何恢复被删除的 GitLab 项目?
  • git rebase 调整提交顺序
  • springboot 实现用户登录身份验证
  • 【NLP】daydayup 词向量训练模型word2vec
  • Maven中 <parent > 的<version>可以使用变量吗