编程笔记 Golang基础 023 切片

编程笔记 Golang基础 023 切片

  • 一、切片
  • 二、定义与初始化
  • 三、基本操作
  • 四、示例

Go语言中的切片(slices)是基于数组的抽象数据类型,它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据,而是指向底层数组的一个连续区域,并记录了该区域的长度和容量。

一、切片

Go语言中的切片(slices)是基于数组的抽象数据类型,它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据,而是指向底层数组的一个连续区域,并记录了该区域的长度和容量。
切片(slices)在Go语言中主要用于管理动态大小的、连续内存区域中的元素序列。它们是数组概念的一种抽象,提供了对底层数组的一个可变视图,允许程序员更加灵活地操作数据集合。切片的主要用途包括:

  1. 动态扩展:与固定长度的数组不同,切片的长度可以增长或缩短,这意味着开发者可以在程序运行时根据需要添加或删除元素。

  2. 高效访问和修改:虽然切片是引用类型,但其内部仍然是基于连续内存的数组,因此它继承了数组快速随机访问的优点,对于大量数据的操作非常高效。

  3. 内存管理简化:切片自动处理内存分配和可能的扩容需求,通过 append 函数可以很容易地在末尾追加元素,如果容量不足,Go会自动创建一个新的更大的数组,并将原数组的数据复制过去。

  4. 子集操作:可以通过索引范围来创建一个原始切片的新视图(即子切片),而不需要复制任何数据。这样可以方便地处理大型数据结构的一部分。

  5. 函数参数和返回值:由于切片具有轻量级的特点(仅存储指向数组的指针、长度和容量),将其作为函数参数传递比传递整个数组更高效,同时,它可以作为多变数量参数或动态生成结果的理想选择。

综上所述,Go语言中的切片适用于大多数需要动态、灵活处理一系列相同类型数据的情况,例如实现堆栈、队列、列表等数据结构,或者在文本处理、网络编程等领域中处理不定长度的数据流。

二、定义与初始化

// 通过 make 函数创建一个长度为3、容量也为3的整数切片
slice := make([]int, 3)
// 或者直接初始化
slice2 := []int{1, 2, 3}// 创建并初始化的同时指定容量(长度必须小于等于容量)
slice3 := make([]int, 2, 5) // 长度为2,容量为5

三、基本操作

  • 访问元素与修改元素:
slice := []int{10, 20, 30}
fmt.Println(slice[0]) // 输出: 10
slice[1] = 30 // 修改第二个元素为30
  • 遍历切片:
for index, value := range slice {fmt.Printf("Index: %d, Value: %d\n", index, value)
}
  • 切片截取(子切片):
// 创建一个新的切片,引用原切片的部分元素
subSlice := slice[1:3]
fmt.Println(subSlice) // 输出: [20 30]
  • 扩展切片:
// 使用 append 函数添加元素到切片,如果超出容量会自动扩容
slice = append(slice, 40)
fmt.Println(slice) // 输出: [10 30 30 40]

四、示例

package mainimport ("fmt"
)func main() {// 初始化一个切片slice := []int{1, 2, 3, 4, 5}// 打印原始切片fmt.Println("Original Slice:", slice)// 截取子切片subSlice := slice[1:3]fmt.Println("Sub-slice:", subSlice)// 在原始切片上追加元素slice = append(slice, 6, 7, 8)fmt.Println("Appended Slice:", slice)// 遍历切片for i, v := range slice {fmt.Printf("Index: %d, Value: %d\n", i, v)}// 容量和长度查询lenOfSlice := len(slice)capOfSlice := cap(slice)fmt.Printf("Length of slice: %d, Capacity of slice: %d\n", lenOfSlice, capOfSlice)// 创建新的切片,但共享相同的底层数组空间newSlice := slice[:lenOfSlice/2]fmt.Println("New Slice (shares memory):", newSlice)// 修改新切片影响原始切片newSlice[0] = 99fmt.Println("After modification to newSlice:")fmt.Println("Original Slice:", slice)fmt.Println("New Slice:", newSlice)
}

在这个综合示例中,我们展示了如何初始化切片、截取子切片、扩展切片、遍历切片以及查看切片的长度和容量。同时,还展示了切片之间的内存关系:对一个切片的修改可能会影响到共享相同底层数组的其他切片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

bat脚本进程停止与启动

在Windows操作系统中,批处理(Batch)脚本是一种常见的自动化脚本工具,通过BAT文件来执行一系列DOS命令。通过BAT脚本,我们可以轻松地控制进程的启动和停止。 一、进程停止 在BAT脚本中,要停止一个进程&…

如何设计一个数模混合芯片?

一、如何设计一个数模混合芯片? 根据需求功能设计数模混合芯片的架构是一个多步骤的过程。以下是一些关键步骤和考虑因素: 需求分析:首先,需要明确数模混合芯片的功能需求。这包括确定模拟电路和数字电路的具体需求,以…

推荐几个不错的技术管理的视频讲座

推荐几个不错的技术管理的视频讲座,均来自DEEPLUS公众号组织的线上视频讲座,地址如下: 1) 技术管理者如何搭班子、带队伍?技术管理者如何搭班子、带队伍?_哔哩哔哩_bilibili 2) 从技术转管理后&…

Stable Diffusion 3 发布,AI生图效果,再次到达全新里程碑!

AI生图效果,再次到达全新里程碑! Prompt:Epic anime artwork of a wizard atop a mountain at night casting a cosmic spell into the dark sky that says "Stable Diffusion 3" made out of colorful energy 提示(意译…

靡语IT:JavaScript函数

目录 一、基本概念 二、函数的声明和调用: 1、创建函数: ​编辑 2 、函数调用: 3、函数参数: 三、全局变量和局部变量 1、局部JavaScript 变量 2 、全局 JavaScript 变量 四、arguments 对象: 五、return 作用 六、嵌…

172基于matlab的MPPT智能算法

基于matlab的MPPT智能算法,通过细菌觅食进行优化。算法引入了趋向性操作,用以进行局部范围内的最优寻找;引入了复制操作,用以避免种群更新盲目随机性,加快了算法的收敛速度;引入了迁徙操作用以避免算法陷入…

【深度学习笔记】卷积神经网络——填充和步幅

填充和步幅 在前面的例子 fig_correlation中,输入的高度和宽度都为 3 3 3,卷积核的高度和宽度都为 2 2 2,生成的输出表征的维数为 2 2 2\times2 22。 正如我们在 sec_conv_layer中所概括的那样,假设输入形状为 n h n w n_h\tim…

【Flink精讲】Flink组件通信

主要指三个进程中的通讯 CliFrontendYarnJobClusterEntrypointTaskExecutorRunner Flink内部节点之间的通讯使用Akka,比如JobManager和TaskManager之间。而operator之间的数据传输是利用Netty。 RPC是统称,Akka,Netty是实现 Akka与Ac…

Window系统上通过SSH搭建git服务器

Window系统上通过SSH搭建git服务器 1. OpenSSH安装(如果已安装,请忽略) 打开“设置”,选择“系统”,然后选择“可选功能”。 扫描列表,查看是否已安装 OpenSSH。 如果未安装,请在页面顶部选择…

Java实现毕业生追踪系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

[算法沉淀记录] 排序算法 —— 希尔排序

排序算法 —— 希尔排序 算法介绍 希尔排序(Shell Sort)是一种基于插入排序的算法,由Donald Shell于1959年提出。希尔排序的基本思想是将待排序的序列划分成若干个子序列,分别进行插入排序,待整个序列中的记录基本有…

php对接抖音小程序授权登录

后端代码 /** * 抖音授权 获取openid * param Request $request * return Json*/ public function code2Session(Request $request): Json {$param $request->param();$config config(douyinconfig.douyin);$arr [appid > $config[appid], //抖音appidsecret > $co…

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行,给网吧部署一套无缝漫游的WIFI网络势在必行。同时,网吧无线准入的验证码在客户机上面进行更新,以防周边的人员进行蹭网,损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

mysql8.0使用MHA实现高可用

1.环境配置 本实验环境共有四个节点, 其角色分配如下(实验机器均为centos 7.x) 机器名称IP配置服务角色manager172.16.90.211manager控制器master172.16.90.212数据库主服务器slave1172.16.90.213数据库从服务器slave2172.16.90.214数据库从…

如何写新闻软文宣传考核稿,媒体发布后效果作用是什么

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 新闻稿是一种正式的文档,用于向媒体和公众传达新闻性的信息。撰写新闻稿时,应遵循一定的结构和原则,以确保信息清晰、准确、有吸引力。以下是撰写新闻…

FastJson中AutoType反序列化漏洞

文章目录 1、频繁出现的反序列化漏洞2、parse()及parseObject()3、AutoType及安全校验3.1 AutoType安全校验3.2 AutoType黑名单机制3.3 SafeMode安全机制3.4 攻击思路4、反序列化攻击模拟4.1 TemplatesImpl攻击调用链路4.2 攻击类Translet生成4.3 构造攻击JSON串4.4 攻击模拟5、…

Linux之用户跟用户组

目录 一、简介 1.1、用户 1.2用户组 1.3UID和GID 1.4用户账户分类 二、用户 2.1、创建用户:useradd 2.2、删除用户:userdel 2.3 、修改用户 usermod 2.4、用户口令的管理:passwd 2.5、切换用户 三、用户组 3.1、增加一个用户组:groupadd 3.…

基于yolov5的水果成熟度检测,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的水果成熟度检测系统,支持图像检测,视频检测和实时摄像检测功能_哔哩哔哩_bilibili (一)简介 基于yolov5的水果成熟度检测系统是在pytorch框架下实现的,这是一个完整的项目&#x…

React18源码: reconcliler启动过程

Reconcliler启动过程 Reconcliler启动过程实际就是React的启动过程位于react-dom包&#xff0c;衔接reconciler运作流程中的输入步骤.在调用入口函数之前&#xff0c;reactElement(<App/>) 和 DOM对象 div#root 之间没有关联&#xff0c;用图片表示如下&#xff1a; 在启…

杂题——1106: 奖学金

题目描述 某小学最近得到了一笔赞助&#xff0c;打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末&#xff0c;每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序&#xff0c;如果两个同学总分相同&#xff0c;再按语文成绩从高到低排序&#xff0c;…