问答详情
源自:5-3 Go语言-切片的更多操作方法

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

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

提问者:慕标5084476 2018-01-07 00:54

个回答

  • 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"...)