go slice append 原理
slice底层是对数组的view
official doc:内建函数append将元素追加到切片的末尾。若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。(数组无法扩容)
var slice []float64 = make([]float64, 5, 5)//容量不足
fmt.Printf("%p\n",&slice[0])
fmt.Println(len(slice),cap(slice))
slice = append(slice,1.2)
fmt.Printf("%p\n",&slice[0])
fmt.Println(len(slice),cap(slice))
slice2 := append(slice,1.23)
fmt.Printf("%p\n",&slice2[0])
fmt.Println(len(slice2),cap(slice2))
0xc000084030
5 5
0xc000090000
6 10
0xc000090000
7 10
true
var slice []float64 = make([]float64, 5, 500)//容量足够
fmt.Printf("%p\n",&slice[0])
fmt.Println(len(slice),cap(slice))
slice = append(slice,1.2)
fmt.Printf("%p\n",&slice[0])
fmt.Println(len(slice),cap(slice))
slice2 := append(slice,1.23)
fmt.Printf("%p\n",&slice2[0])
fmt.Println(len(slice2),cap(slice2))
0xc000090000
5 500
0xc000090000
6 500
0xc000090000
7 500
Tags : 本文未设置标签
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!