news 2026/9/6 19:33:38

Go语言中的切片

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go语言中的切片

Go 语言中的切片(Slice)是一个非常核心的数据结构,它是对数组的抽象和封装,提供了更灵活、强大的序列处理能力。

一.切片的基本概念

切片是一个动态数组,它由三个部分组成:

  • 指针:指向底层数组的起始位置

  • 长度(len):切片中当前元素的数量

  • 容量(cap):切片可以容纳的最大元素数量

注意:切片不是数组本身,而是数组的一层抽象。

二、数组 vs 切片(先分清)

数组(Array)

var a [3]int = [3]int{1, 2, 3}
  • 长度固定

  • 值类型

  • 很少直接用在业务代码中

切片(Slice)

var s []int = []int{1, 2, 3}
  • 长度可变

  • 引用语义

  • Go 业务代码的主角

三、切片的底层结构(非常重要)

Go 的切片在运行时是一个结构体:

type slice struct { ptr *T // 指向底层数组 len int // 当前长度 cap int // 容量 }

知识的三点:

  1. len:当前“能用”的元素个数

  2. cap:从ptr开始,底层数组最多能放多少

  3. 多个切片可能共享同一个底层数组

四、创建切片的几种方式

1. 字面量创建(最常用)

s := []int{1, 2, 3}
  • len = 3

  • cap = 3

2. 使用make函数创建(最推荐)

s := make([]int, 2, 5)

含义:

  • 长度 = 2(已有 2 个元素,默认值)

  • 容量 = 5(最多可扩到 5),可缺省。

3. 从数组 / 切片切出来

arr := [5]int{1, 2, 3, 4, 5} s := arr[1:4] // [2 3 4]

规则:

s := a[low : high] // 左闭右开

这是“视图”,不是拷贝

五、append:切片的扩容机制

基本用法,append会触发cap翻倍扩容

s := []int{1, 2} s = append(s, 3) //cap扩容为原来的2倍 fmt.Println(len(s), cap(s))

输出:3,4

扩容规则

  • 小容量:2 倍增长

  • 大容量:逐渐放缓(≈1.25x)

  • 具体策略由 Go runtime 决定

六、如何安全拷贝切片

使用 copy(官方推荐)

src := []int{1, 2, 3} dst := make([]int, len(src)) copy(dst, src) fmt.Println(dst)

输出:[1 2 3]

七、nil slice vs 空 slice

var s1 []int // nil slice s2 := []int{} // 空 slice s3 := make([]int,0) // 空 slice
属性s1s2 / s3
len00
cap00
== niltruefalse
append

八、切片作为函数参数

func modify(s []int) { s[0] = 100 }
  • 修改元素 → 会影响外部

  • append 扩容 → 不一定影响外部

因为 slice 本身是值传递(复制 slice 结构体)

九、遍历切片

for

for i := 0; i < len(s); i++ { fmt.Println(s[i]) }

range(最常用)

for i, v := range s { fmt.Println(i, v) }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 12:05:28

AI时代核心竞争力:手写多智能体系统,不依赖LangChain/LlamaIndex

本文详解如何不依赖高级编排框架&#xff0c;使用原生Python和LLM API构建Deep Research Agent多智能体系统。系统采用反思式搜索循环和并行处理机制&#xff0c;实现自主规划、多轮搜索优化和结构化报告生成。文章提供完整技术实现细节、架构设计和开源代码&#xff0c;强调理…

作者头像 李华
网站建设 2026/9/6 11:36:11

WebSocket 对比 MQTT通信优势

——以充电桩系统为例在物联网项目中&#xff0c;通信协议的选择直接影响着系统的稳定性、实时性和开发效率。本文将以一个典型的充电桩系统&#xff08;包含充电桩、云端服务器、微信小程序三个节点&#xff09;为例&#xff0c;深入探讨 MQTT 和 WebSocket 两大协议的应用场景…

作者头像 李华
网站建设 2026/9/7 9:56:27

基于springboot面料花型试衣系统

基于Spring Boot的面料花型试衣系统是一个结合了后端技术和前端界面设计的综合性平台&#xff0c;它利用Spring Boot框架的高效性和稳定性&#xff0c;为用户提供了一个便捷、实时的试衣体验。以下是对该系统的详细介绍&#xff1a; 一、系统概述 面料花型试衣系统是一个专为面…

作者头像 李华
网站建设 2026/9/7 4:25:10

域名被污染是什么意思?还能不能继续使用?

在日常域名管理和使用过程中&#xff0c;不少人会遇到“域名被污染”的情况。那么&#xff0c;域名被污染到底是什么意思&#xff1f;还能否继续使用呢&#xff1f;一、什么是域名被污染域名被污染&#xff0c;通常指的是域名的解析或访问受到干扰&#xff0c;导致用户无法正常…

作者头像 李华
网站建设 2026/9/6 12:14:30

Python大数据基于深度学习的音乐推荐系统-250326--论文

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 Python-50326– 论文大数据基于深度学习的音乐推荐系统 项目简介 本次研究将…

作者头像 李华
网站建设 2026/9/7 4:56:12

Python大数据影评情感分析可视化及推荐系统的设计与实现_u5ck1y17_论文

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 Python_uck一7_论文 大数据影评情感分析可视化及推荐系统的设计与实现 项目…

作者头像 李华