Go语言:切片的长度与容量

Go语言的切片拥有长度和容量2个属性。切片的长度就是它所包含的元素个数,切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
我们可以用len()方法来得到切片的长度、用cap()方法来得到切片的容量。

package main

import "fmt"

func main() {
	s := []int{2, 3, 5, 7, 11, 13}
	printSlice(s)

	// 截取切片使其长度为 0
	s = s[:0]
	printSlice(s)

	// 拓展其长度
	s = s[:4]
	printSlice(s)

	// 舍弃前两个值
	s = s[2:]
	printSlice(s)
	
	s = s[0:4]
	printSlice(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

输出结果:
len=6 cap=6 [2 3 5 7 11 13]
len=0 cap=6 []
len=4 cap=6 [2 3 5 7]
len=2 cap=4 [5 7]
len=4 cap=4 [5 7 11 13]

请认真观察:
s = s[:0],相比原始数据,切片底层数组尚未变动,容量长度无变化,切片首尾指向有变化;
s = s[:4],相比上一步数据,切片底层数组仍未变动,容量长度无变化,切片收尾指向有变化;
s = s[2:],相比上一步数据,此时切片底层数组已改变,容量长度有变化,切片收尾指向有变化;
s = s[0:4],相比上一步数据,此时底层数组尚未变动,容量长度无变化,切片收尾指向有变化;

你可能感兴趣的:(笔记,go语言)