尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【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)// 需接收返回值以更新原切片
RELATED

相关推荐

【python基础】python基础习题练习(一)

【python基础】python基础习题练习(一)

/* 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:20:41
PP-LCNet_x0_25_textline_ori_onnx未来展望:轻量级AI模型的发展趋势

PP-LCNet_x0_25_textline_ori_onnx未来展望:轻量级AI模型的发展趋势

PP-LCNet_x0_25_textline_ori_onnx未来展望:轻量级AI模型的发展趋势 【免费下载链接】PP-LCNet_x0_25_textline_ori_onnx 项目地址: https://ai.gitcode.com/paddlepaddle/PP-LCNet_x0_25_textline_ori_onnx 在人工智能技术快速发展的今天,PP-LC…

📅 2026/11/3 18:20:41
5个关键步骤实现WanVideo多模态视频生成:ComfyUI本地部署深度实战指南

5个关键步骤实现WanVideo多模态视频生成:ComfyUI本地部署深度实战指南

5个关键步骤实现WanVideo多模态视频生成:ComfyUI本地部署深度实战指南 想要在本地搭建强大的视频生成AI系统吗?WanVideo模型为你提供了从文本到视频、图像到视频、视频到视频的全方位生成能力。我们将在ComfyUI环境中为你展示如何高效部署这个强大的多模…

📅 2026/11/3 18:20:41
MORE NEWS

更多资讯

📰

如何抽取实体间的关系?GLiFormer Large v1 联合关系抽取实战教程

如何抽取实体间的关系?GLiFormer Large v1 联合关系抽取实战教程 【免费下载链接】gliformer-large-v1 项目地址: https://ai.gitcode.com/hf_mirrors/knowledgator/gliformer-large-v1 GLiFormer Large v1 是面向信息抽取的多任务大模型,支持联…

📰

OpenWhispr 语音转文字听写指南:如何用全局热键把说话直接变成文字

OpenWhispr 语音转文字听写指南:如何用全局热键把说话直接变成文字 【免费下载链接】openwhispr Voice-to-text dictation app with local (Nvidia Parakeet/Whisper) and cloud models (BYOK). Privacy-first and available cross-platform. 项目地址: https://g…

📰

26个数据集、91%的F1:GLiFormer Large v1基准评测数据全解读

人工智能NLP大模型 【免费下载链接】gliformer-large-v1 项目地址: https://ai.gitcode.com/hf_mirrors/knowledgator/gliformer-large-v1 点击查看 免费下载 GLiFormer Large v1 是一个 5.756 亿参数的开源多任务信息抽取模型:一个 DeBERTa 编码器同时…

📰

BiliBiliToolPro 部署教程:从本地一键命令到零维护云函数,5 种方式完整指南

BiliBiliToolPro 部署教程:从本地一键命令到零维护云函数,5 种方式完整指南 【免费下载链接】BiliBiliToolPro B 站(bilibili)自动任务工具,支持docker、青龙、k8s等多种部署方式。全面拥抱AI。敏感肌也能用。 项目地…

📰

Whisky:免费在Mac运行Windows程序的完整指南

Whisky:免费在Mac运行Windows程序的完整指南 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky Whisky 是一个用 SwiftUI 写的 macOS 原生 Wine 封装器,让你不碰…

📰

《经典机器学习实战》第 1 课:导论——是什么、简史、负责任 AI 与标准流程

本文收录于专栏 《经典机器学习实战》 摘要:从规则引擎的破产到机器学习的定义,一趟走完 AI 七十年简史、负责任 AI 六原则与七步标准流程。你将看到 13 维特征让手写规则彻底失效而逻辑回归拿到 98.1%,以及一个整体准确率 85% 的模型如何对少…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬