为了账号安全,请及时绑定邮箱和手机立即绑定

append函数更换底层数组,是不是等于这时候切片就是一个新的数组?

append函数更换底层数组,是不是等于这时候切片就是一个新的数组?
我测试了一下,如果append没有超过切片容量的话是修改原数组,如果超过切片的容量的话是更换数组,这个是怎么个机制?这样设计有点绕,是针对什么样的实际场景呢?

正在回答

1 回答

首先明确 append 为Go的预声明标识符(也就是俗称内置函数),切片仅仅是对go数组的抽象。

func append
func append(slice []Type, elems ...Type) []Type

内建函数append将元素追加到切片的末尾。若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。

slice = append(slice, elem1, elem2)
slice = append(slice, anotherSlice...)

作为特例,可以向一个字节切片append字符串,如下:

slice = append([]byte("hello "), "world"...)


0 回复 有任何疑惑可以回复我~
#1

慕标5084476 提问者

当容量满足的情况下append会改变底层数组元素,当超出容量的情况下不会修改底层数组元素,那些情况下需要这种特性?
2018-01-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

append函数更换底层数组,是不是等于这时候切片就是一个新的数组?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信