首页/新闻资讯/正文详情

【Go语言基础【17】】切片:一种动态数组

发布时间:2026/11/3 18:26:08 来源:云帆数科 栏目:资讯中心
【Go语言基础【17】】切片:一种动态数组
文章目录零、概述一、切片基础1、切片的结构2、切片的创建方式3、切片的操作与扩容二、切片的拷贝与共享内存三、切片作为函数参数Go语言的切片slice是一种动态数组提供了灵活、高效的元素序列操作。它基于底层数组实现通过长度和容量的分离设计支持动态扩容和内存优化。零、概述切片 vs 数组特性切片slice数组array类型引用类型值类型长度动态可变固定不可变传递方式传递指针副本修改影响原数据传递值拷贝修改不影响原数据创建方式make([]T, len, cap)或[]T{...}[n]T{...}或[...]T{...}内存占用包含指针、长度、容量仅包含元素性能优化原理预分配容量若已知元素数量使用make([]T, 0, capacity)避免频繁扩容。避免内存泄漏切片保留对底层数组的引用若仅需部分元素建议copy到新切片后释放原数组。大容量切片谨慎扩容大切片扩容可能导致内存浪费可通过copy手动控制扩容策略。一、切片基础1、切片的结构切片是一个引用类型底层结构包含三个字段typeslicestruct{array unsafe.Pointer// 指向底层数组的指针lenint// 当前切片的长度capint// 底层数组的容量}长度len切片中实际存在的元素数量可通过len()函数获取。容量cap底层数组的总长度可通过cap()函数获取。指针array指向底层数组的起始位置决定了切片的起始元素。示例创建切片s:make([]int,3,5)// 创建长度为3、容量为5的切片// 底层数组: [0, 0, 0, 0, 0]// 切片结构: {array: 指向数组, len: 3, cap: 5}2、切片的创建方式a.使用make函数s1:make([]int,3)// 长度容量3初始值为0s2:make([]int,3,5)// 长度3容量5b.使用切片字面量s3:[]int{1,2,3}// 长度容量3初始值为[1,2,3]s4:[]int{3:100}// 索引3的值为100长度容量4初始值为[0,0,0,100]c.从数组或切片派生arr:[5]int{1,2,3,4,5}s5:arr[1:3]// 从数组创建切片[2,3]长度2容量4s6:s5[0:2]// 从切片创建切片[2,3]长度2容量43、切片的操作与扩容a.访问元素通过索引访问范围为0到len(s)-1s:[]int{1,2,3}fmt.Println(s[0])// 输出: 1b.基于切片创建切片通过指定[low:high:max]创建新切片low起始索引包含。high结束索引不包含新切片长度为high - low。max容量上限新切片容量为max - low可选默认等于原切片容量。s:[]int{10,20,30,40,50}s1:s[1:3]// 长度2容量4元素[20,30]s2:s[1:3:3]// 长度2容量2元素[20,30]c.nil切片与空切片varnilSlice[]int// nil切片arraynillen0cap0emptySlice:make([]int,0)// 空切片array指向空数组len0cap0nil切片未初始化array为nil。空切片已初始化但长度为0array指向底层数组。d.动态扩容append函数s:make([]int,0,2)// 容量2sappend(s,1,2)// 追加元素容量足够直接添加sappend(s,3)// 容量不足触发扩容通常翻倍扩容规则容量1000时通常翻倍。容量≥1000时按1.25倍增长具体实现可能随版本变化。e、多维切片切片的元素可以是另一个切片形成多维结构matrix:[][]int{{1,2,3},{4,5,6},}fmt.Println(matrix[0][1])// 输出: 2注意多维切片的每个内层切片是独立的可拥有不同长度。二、切片的拷贝与共享内存浅拷贝共享底层数组s1:[]int{1,2,3}s2:s1[0:2]// s2与s1共享底层数组s1[0]100// 修改s1会影响s2fmt.Println(s2[0])// 输出: 100深拷贝独立内存使用copy函数s1:[]int{1,2,3}s2:make([]int,len(s1))copy(s2,s1)// 复制元素到新切片s1[0]100// 修改s1不影响s2fmt.Println(s2[0])// 输出: 1三、切片作为函数参数切片作为参数传递时传递的是切片的值拷贝即array、len、cap的副本但由于array是指针函数内可修改原切片的元素funcmodify(s[]int){s[0]100// 修改底层数组的元素}funcmain(){s:[]int{1,2,3}modify(s)fmt.Println(s[0])// 输出: 100}若需在函数内扩容并影响原切片需返回新切片funcappendElement(s[]int)[]int{returnappend(s,4)}s:[]int{1,2,3}sappendElement(s)// 需接收返回值以更新原切片

相关推荐

eslav_PP-OCRv5_mobile_rec_onnx预处理流程详解:RecResizeImg与MultiLabelEncode技术
eslav_PP-OCRv5_mobile_rec_onnx预处理流程详解:RecResizeImg与MultiLabelEncode技术

eslav_PP-OCRv5_mobile_rec_onnx预处理流程详解:RecResizeImg与MultiLabelEncode技术 【免费下载链接】eslav_PP-OCRv5_mobile_rec_onnx 项目地址: https://ai.gitcode.com/paddlepaddle/eslav_PP-OCRv5_mobile_rec_onnx 飞桨PaddlePaddle的eslav_PP-OCRv5_… · 2026/11/3 18:26:08

Qwen3-Omni-30B-A3B-Instruct智能直播系统:多模态互动与内容分析平台
Qwen3-Omni-30B-A3B-Instruct智能直播系统:多模态互动与内容分析平台

Qwen3-Omni-30B-A3B-Instruct智能直播系统:多模态互动与内容分析平台 【免费下载链接】Qwen3-Omni-30B-A3B-Instruct Qwen3-Omni是多语言全模态模型,原生支持文本、图像、音视频输入,并实时生成语音。 项目地址: https://ai.gitcode.com/hf… · 2026/11/3 18:26:08

Maven的pom打包:父POM、聚合POM与BOM如何分工
Maven的pom打包:父POM、聚合POM与BOM如何分工

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 18:25:07

SpringBoot通过kt-connect+kubectl进行本地调试k8s服务
SpringBoot通过kt-connect+kubectl进行本地调试k8s服务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 11:38:27

突破边界,智造未来|深圳市浩鑫能源有限公司 换电柜电源CY-2018|1300W 90V 20A
突破边界,智造未来|深圳市浩鑫能源有限公司 换电柜电源CY-2018|1300W 90V 20A

“ 深耕市场,追求卓越——换电柜电源——CY-0218 1300W 90V 20A深圳市浩鑫能源有限公司,换电柜电源在智能换电基础设施高速发展的今天,换电柜电源作为换电柜的“能量心脏”,其性能的优劣直接决定了整个系统的稳定性、安全性与运营… · 2026/11/4 11:38:27

如何搞定课程设计?别人走过的捷径,你也可以走
如何搞定课程设计?别人走过的捷径,你也可以走

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 11:38:27

如何让下载文件自动归类:PyTube Downloader动态文件夹组织完全教程
如何让下载文件自动归类:PyTube Downloader动态文件夹组织完全教程

【免费下载链接】pytube-downloader Simple. Fast. Powerful YouTube Downloader For Mac, Windows & Linux. 项目地址: https://gitcode.com/gh_mirrors/pytu/pytube-downloader 点击查看 免费下载 PyTube Downloader 是一款简单、快速、强大的 YouTube 下载器… · 2026/11/4 11:38:27

Hermes Agent多智能体协作:如何让AI团队高效完成复杂任务?
Hermes Agent多智能体协作:如何让AI团队高效完成复杂任务?

Hermes Agent多智能体协作:如何让AI团队高效完成复杂任务? 你是否遇到过单个AI助手难以处理复杂项目的情况?当面对需要多领域知识、并行处理、持续跟踪的复杂任务时,单个AI往往力不从心。Hermes Agent的多智能体协作功能正是为解… · 2026/11/4 11:37:27

维智 JS-API 定位插件:H5 开发必备的全域定位解决方案
维智 JS-API 定位插件:H5 开发必备的全域定位解决方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 11:34:25

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码