【Go】go语言中切片的长度变化后容量的变化

一、新增信息长度 + 当前长度 <= 当前容量

func printSlice(x []int) {
	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
func main() {
	numbers := []int{0, 1, 2}
	printSlice(numbers)
	numbers = append(numbers, 3, 4)
	printSlice(numbers)
	// 通过append给numbers增加信息,如果当前切片的长度 < 当前容量,增加信息的长度+当前长度和<=当前容量,
	// 那么numbers的长度变为【当前长度+新增信息长度】,容量不变
	numbers = append(numbers, 11)
	printSlice(numbers)
}
// 输出结果:
len=3 cap=3 slice=[0 1 2]
len=5 cap=6 slice=[0 1 2 3 4]
len=6 cap=6 slice=[0 1 2 3 4 5]

二、新增信息长度 + 当前长度 > 当前容量 && < 当前容量的2倍

func main() {
	numbers := []int{0, 1, 2}
	printSlice(numbers)
	numbers = append(numbers, 3, 4)
	printSlice(numbers)
	// 通过append给numbers增加信息,如果当前切片的长度<当前容量,新增信息的长度+当前的长度> 当前容量 && <当前容量的2倍,
	// 那么numbers的长度变为【当前长度+新增信息长度】,容量变为:【当前容量的2倍】
	numbers = append(numbers, 5, 6)
	printSlice(numbers)
}
// 输出结果:
len=3 cap=3 slice=[0 1 2]
len=5 cap=6 slice=[0 1 2 3 4]
len=7 cap=12 slice=[0 1 2 3 4 5 6]

三、新增信息长度 + 当前长度 > 当前容量的2倍

func printSlice(x []int) {
	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}
func main() {
	numbers := []int{0, 1, 2}
	printSlice(numbers)
	// 通过append给numbers增加信息,如果当前切片的长度与容量相等,新增信息长度<=当前的长度时, 
	// 那么切片的长度变为【当前长度+新增信息长度】,容量变为【当前容量的2倍】
	numbers = append(numbers, 3, 4, 5)
	printSlice(numbers)

	// 通过append给numbers增加信息,如果当前切片A的长度与容量相等,新增信息B的长度>切片A当前的长度,
	// 那么切片的长度变为【当前长度+新增信息长度】,容量变为【B长度+A长度+(B长度-A长度)%2】
	numbers = append(numbers, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
	printSlice(numbers)
}

// 输出结果:
len=3 cap=3 slice=[0 1 2]
len=6 cap=6 slice=[0 1 2 3 4 5]
len=17 cap=18 slice=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]

你可能感兴趣的:(golang,golang,开发语言,后端)