go语言切片的长度len()和容量cap()
切片的三大属性
切片除了指针(指向切片第一个元素所对应的底层数组的元素的内存地址)之外,还有两个重要的属性,分别是长度和容量。分别可以用len()函数和cap()函数的返回值获取。除此之外,二者是不同的。我们可以先来看一个实例。
package main
import "fmt"
func main() {
s := []int{1, 2, 3, 4, 5, 6}
fmt.Printf("s的长度为%d,容量为%d \n", len(s), cap(s))
s0 := s[0:2]
fmt.Printf("s0的长度为%d,容量为%d \n", len(s0), cap(s0))
var arr [9]int = [9]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
s1 := arr[2:8]
fmt.Printf("s1的长度为%d,容量为%d \n", len(s1), cap(s1))
s2 := s1[2:]
fmt.Printf("s2的长度为%d,容量为%d \n", len(s2), cap(s2))
}
————————————————————————
代码输出:
s的长度为6,容量为6
s0的长度为2,容量为6
s1的长度为6,容量为7
s2的长度为4,容量为5
切片的长度和容量的区别
如上实例代码,从切片s和s0我们可以明显看出,切片的长度和容量是完全不同的,从切片s1和s2我们也可以理解到容量和长度的区别:
- 切片长度len:表示的是切片元素的个数;
- 切片容量cap:表示的是切片指针指向切片底层(数组,如s1,或切片,如s2)的元素到最后一个的个数;
len()方法
切片slice的len()方法可以返回切片中元素的个数。
cap()方法
cap()方法返回切片slice的容量,及slice指针指向的底层数组或切片的元素到最后一个元素的个数。
切片声明时指定长度和容量的方法
我们可以用make( [ ]type, len, cap )的方法来声明切片的同时指定其长度和容量,当容量省略时,容量默认等于长度。
package main
import "fmt"
func main() {
s := make([]int, 5, 10)
fmt.Printf("s的长度为%d,容量为%d \n", len(s), cap(s))
fmt.Println(s)
}
————————————————————————————
代码输出:
s的长度为5,容量为10
[0 0 0 0 0]