在 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)