Go 语言 的 切片 拥有长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片 slice 的长度和容量可通过表达式 len(slice) 和 cap(slice) 来获取,我们在使用切片的过程中,如果使用 append 使切片的长度大于了切片的容量,那么切片的容量会以双倍的形式自动扩容。
n := len(slice)
参数 | 描述 |
---|---|
slice | 要获取长度的切片。 |
返回切片的长度。
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)
}
程序运行后,控制台输出如下:
我们首先创建了一个有三个元素的切片,接着,我们使用 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)
}
程序运行后,控制台输出如下:
我们使用 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))
}
程序运行后,控制台输出如下:
我们使用 make 创建了一个长度为 0,容量为 2 的切片,接着,我们使用 len 获取切片的长度,使用 cap 获取切片的容量,此时切片的长度和容量分别为 0 和 2。
接着,我们使用 append 给切片添加了两个元素,此时切片的长度和容量都为 2。我们再次添加一个元素时,此时切片的长度变成了 3,而容量变成了 4,因为此时如果不扩容,那么切片的长度就大于了切片的容量,因此切片的容量是双倍增长,即由 2 变成了 4。
我们再次,添加两个元素,同样会导致切片的容量双倍增长,由 4 变成了 8。
Go 语言的切片拥有长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片 slice 的长度和容量可通过表达式 len(slice) 和 cap(slice) 来获取,我们在使用切片的过程中,如果使用 append 使切片的长度大于了切片的容量,那么切片的容量会以双倍的形式自动扩容。获取切片长度 len 语法:
n := len(slice)
获取切片容量 cap 语法:
n := cap(slice)