在 Go 语言(Golang)中,切片(Slice)是一种引用类型,它是对数组的抽象和扩展。切片本身不存储数据,而是描述了底层数组的一个连续片段(或者说是一个窗口)。切片提供了一种灵活的方式来操作数组的部分或全部元素,同时比数组更强大、更灵活。
切片可以通过以下方式声明和初始化:
s := []int{1, 2, 3} // 声明一个int类型的切片s,并初始化为包含三个元素的切片
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4] // 从数组a中获取索引1到索引3(不包括4)的元素作为切片s
在这个例子中,s 是一个新的切片,它引用了 a 数组的一部分(索引 1 到 3 的元素)。对 s 的修改不会影响 a 中索引 0 和 4 的元素,但会影响索引 1 到 3 的元素(如果它们没有被其他切片共享)。
make 函数:s := make([]int, 0, 5) // 声明一个int类型的切片s,初始长度为0,容量为5
在这个例子中,make 函数用于分配并初始化一个切片。切片的初始长度为 0,但它有足够的容量来存储额外的元素,直到达到其容量限制(在这个例子中是 5)。
切片有三个属性:长度(Length)、容量(Capacity)和指向的底层数组的指针(在 Go 中不直接暴露,但理解其存在对理解切片的行为很重要)。
切片支持多种操作,包括:
append 函数。for 循环或 range 关键字。copy 函数(但请注意,这不会复制底层数组,只是复制了切片的一部分或全部到另一个切片中)。append 函数会自动分配更大的内存块,并将旧切片的内容复制到新内存中(可能还有新追加的元素)。因此,频繁地向切片追加元素可能会导致性能问题,特别是当切片非常大时。nil,表示切片不引用任何底层数组。对 nil 切片进行切片操作将返回另一个 nil 切片。上一篇: Golang 语言结构体
下一篇: Golang 语言范围(Range)