切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。
Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“那一块”,切的过程包含从哪里开始(切片的起始位置)及切多大(切片的大小),容量可以理解为装切片的口袋大小,如下图所示。
切片默认指向一段连续内存区域,可以是数组,也可以是切片本身。
从连续内存区域生成切片是常见的操作,格式如下:
slice [开始位置 : 结束位置]
语法说明如下:
从数组或切片生成新的切片拥有如下特性:
程序实例代码
package main import "fmt" func main() { fmt.Println("从数组或切片生成新的切片") //a 是一个拥有 3 个整型元素的数组,被初始化为数值 1 到 3 var a = [3]int{1, 2, 3} //使用 a[1:2] 可以生成一个新的切片 [2] 就是 a[1:2] 切片操作的结果 fmt.Println(a, a[1:2]) fmt.Println("表示原有的切片") //生成切片的格式中,当开始和结束位置都被忽略时,生成的切片将表示和原切片一致的切片 fmt.Println(a[:]) fmt.Println("重置切片,清空拥有的元素") fmt.Println(a[0:0]) fmt.Println("直接声明新的切片") //声明字符串切片 var strList []string //声明整型切片 var numList []int //声明空整型切片 var numListEmpty = []int{} //输出3个切片 fmt.Println(strList, numList, numListEmpty) //输出3个切片大小 fmt.Println(len(strList), len(numList), len(numListEmpty)) fmt.Println("使用 make() 函数构造切片") c := make([]int, 2) d := make([]int, 2, 10) fmt.Println(c, d) fmt.Println(len(c), len(d)) }
输出结果
原文:https://www.cnblogs.com/personblog/p/12249148.html