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

您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!

  Previous post 0.0.0.0:2379 != 127.0.0.1:2379
Next post   为何需要反射

添加新评论

  关于博主【WANG-FEiHU】

Duplicate
-----------Complicate
--------------------------Appreciate
-----------------------------------------Fate

闻先后,术专攻
三人有师
习得文武艺,货与帝王家
人性不曾变,资本永无眠

-----------花有重开日,人无再少年-----------

  分类目录

  monitor(TD)

暗自伤心,不如立即行动。

再多一点努力,就多一点成功 的 可能

得意淡然,失意坦然;喜而不狂,忧而不伤。

海纳百川,有容乃大;壁立千仞,无欲则刚。

自古华山一条路,心不狠,站不稳

经历的越多才越明白,古人诚不欺我