Go语言切片长度与容量

Go语言切片长度与容量教程

Go 语言切片 拥有长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

切片 slice 的长度和容量可通过表达式 len(slice) 和 cap(slice) 来获取,我们在使用切片的过程中,如果使用 append 使切片的长度大于了切片的容量,那么切片的容量会以双倍的形式自动扩容。

获取切片长度len

语法

n := len(slice)

参数

参数 描述
slice 要获取长度的切片。

返回值

返回切片的长度。

获取切片容量cap

语法

n := cap(slice)

参数

参数 描述
slice 要获取容量的切片。

返回值

返回切片的容量。

案例

获取切片长度和容量

使用 len 获取切片长度,使用 cap 获取切片容量

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //使用 len 获取切片长度,使用 cap 获取切片容量 var sliceHaiCoder = []string{"JavaScript", "Vue", "Python"} lenSlice := len(sliceHaiCoder) capSlice := cap(sliceHaiCoder) fmt.Println("Len =", lenSlice, "Cap =", capSlice) }

程序运行后,控制台输出如下:

58 golang切片cap与len.png

我们首先创建了一个有三个元素的切片,接着,我们使用 len 获取切片的长度,使用 cap 获取切片的容量,结果输出的长度和容量都为 3。

获取切片长度和容量

使用 make 创建切片,使用 len 获取切片长度,使用 cap 获取切片容量

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //使用 make 创建切片,使用 len 获取切片长度,使用 cap 获取切片容量 var sliceHaiCoder = make([]string, 4, 10) lenSlice := len(sliceHaiCoder) capSlice := cap(sliceHaiCoder) fmt.Println("Len =", lenSlice, "Cap =", capSlice) }

程序运行后,控制台输出如下:

59 golang切片cap与len.png

我们使用 make 创建了一个长度为 4,容量为 10 的切片,接着,我们使用 len 获取切片的长度,使用 cap 获取切片的容量,结果输出的长度和容量分别为 4 和 10。

这里的切片虽然没有任何元素,但因为我们使用 make 创建的时候,指定了长度和容量,因此我们获取的长度和容量就是我们指定的值。

切片的扩容

当切片的长度大于切片的容量时,切片的容量会以双倍的形式自动扩容

package main import ( "fmt" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") //使用 make 创建切片,使用 len 获取切片长度,使用 cap 获取切片容量 var sliceHaiCoder = make([]string, 0, 2) fmt.Printf("Len = %d, Cap = %d\n", len(sliceHaiCoder), cap(sliceHaiCoder)) sliceHaiCoder = append(sliceHaiCoder, "Hello") sliceHaiCoder = append(sliceHaiCoder, "HaiCoder") fmt.Printf("Len = %d, Cap = %d\n", len(sliceHaiCoder), cap(sliceHaiCoder)) sliceHaiCoder = append(sliceHaiCoder, "嗨客网") fmt.Printf("Len = %d, Cap = %d\n", len(sliceHaiCoder), cap(sliceHaiCoder)) sliceHaiCoder = append(sliceHaiCoder, "Golang") sliceHaiCoder = append(sliceHaiCoder, "Python") fmt.Printf("Len = %d, Cap = %d\n", len(sliceHaiCoder), cap(sliceHaiCoder)) }

程序运行后,控制台输出如下:

60 golang切片cap与len.png

我们使用 make 创建了一个长度为 0,容量为 2 的切片,接着,我们使用 len 获取切片的长度,使用 cap 获取切片的容量,此时切片的长度和容量分别为 0 和 2。

接着,我们使用 append 给切片添加了两个元素,此时切片的长度和容量都为 2。我们再次添加一个元素时,此时切片的长度变成了 3,而容量变成了 4,因为此时如果不扩容,那么切片的长度就大于了切片的容量,因此切片的容量是双倍增长,即由 2 变成了 4。

我们再次,添加两个元素,同样会导致切片的容量双倍增长,由 4 变成了 8。

Go语言切片长度与容量总结

Go 语言的切片拥有长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

切片 slice 的长度和容量可通过表达式 len(slice) 和 cap(slice) 来获取,我们在使用切片的过程中,如果使用 append 使切片的长度大于了切片的容量,那么切片的容量会以双倍的形式自动扩容。获取切片长度 len 语法:

n := len(slice)

获取切片容量 cap 语法:

n := cap(slice)