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]
-----------------------------------------------Elevate

三人行 有吾师

-------------花有重开日 梦无止境时-------------

  分类目录

  monitor(TD)

在看得见的地方站得直 是因为在看不见的地方站得稳

With great power comes great responsibility :能力越大责任越大。

让你变得更好的那个人,往往是你觉得很难与之相处的那个人

觉得自己做的到和不做的到,其实只在一念之间。

拿破仑波拿巴,他一生打了90%以上的胜仗,你在第一时间想到他一生中最著名的战役是什么?

停止狼狈 让错纯粹。

凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。