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

来源:5-3 Go语言-切片的更多操作方法

慕标5084476

2018-01-07 00:54

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

写回答 关注

1回答

  • pardon110
    2018-01-07 16:41:08

    首先明确 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"...)


    慕标5084...

    当容量满足的情况下append会改变底层数组元素,当超出容量的情况下不会修改底层数组元素,那些情况下需要这种特性?

    2018-01-07 18:03:24

    共 1 条回复 >

Go语言第一课

Go语言入门教程,编程之必备知识扩散,打好Go语言编程基础

107752 学习 · 148 问题

查看课程

相似问题