Go切片是对底层数组的轻量级引用,由指针、长度(len)和容量(cap)三部分构成;创建方式有字面量初始化、make函数及截取;len为当前元素数,cap为起始位置至数组末尾的总元素数;支持修改、append追加(可能扩容)、共享底层数组(有意外修改风险),需copy避免;常用操作包括删除元素、截取、清空、判空等。

Go 语言切片(slice)不是独立的数据结构,而是对底层数组的轻量级引用。它由三个核心部分组成:指向数组起始位置的指针、当前长度(len)、最大可用长度(cap)。理解这三者关系,是正确使用切片的关键。
• 直接字面量初始化:s := []int{1, 2, 3} —— 创建长度与容量均为 3 的切片,元素已赋值
• 使用 make 函数:s := make([]int, 5) 创建长度为 5、容量也为 5 的切片;s := make([]int, 3, 8) 创建长度为 3、容量为 8 的切片(预留空间,避免频繁扩容)
• 从数组或已有切片截取:arr := [5]int{0,1,2,3,4}; s := arr[1:4] 得到长度为 3、容量为 4(从索引 1 到数组末尾共 4 个元素)的切片
长度 len(s) 是当前可访问元素个数;容量 cap(s) 是从切片起始位置到底层数组末尾的元素总数。
例如:s := []int{0,1,2,3,4,5}; sub := s[2:4]
→ sub 长度是 2(索引 2 和 3)
→ sub 容量是 4(从索引 2 开始,到原底层数组末尾还有 4 个位置:索引 2/3/4/5)
注意:切片操作始终遵循“前包后不包”原则,即 s[i:j] 包含 i,不包含 j。
• 修改元素:直接用下标赋值,如 s[0] = 99
• 追加元素:用 append(s, 1, 2, 3),若容量足够,就在原底层数组扩展;超出时会自动分配新数组,原切片变量将指向新地址
• 多个切片可能共享同一底层数组:修改其中一个,可能意外影响另一个。例如:a := arr[1:3]; b := arr[2:4]; a[1] = 88 → b[0] 也会变成 88
• 如需独立副本,显式复制:dst := make([]int, len(src)); copy(dst, src)
立即学习“go语言免费学习笔记(深入)”;
• 删除某索引元素(如删掉第 i 个):s = append(s[:i], s[i+1:]...)
• 截取前 n 个:s = s[:n](确保 n ≤ len(s))
• 清空切片(保留底层数组):s = s[:0]
• 判断是否为空:len(s) == 0(不能用 s == nil 判空,因空切片不等于 nil)
• 切片不能直接比较(除与 nil),需逐元素或用 reflect.DeepEqual
基本上就这些。切片用起来灵活,但它的“引用性”和“容量隐含逻辑”容易被忽略——写代码时多看一眼 len 和 cap,多数坑都能避开。
以上就是如何使用Golang切片_Golang切片原理与语法说明的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号