append函数更换底层数组,是不是等于这时候切片就是一个新的数组?
append函数更换底层数组,是不是等于这时候切片就是一个新的数组?
我测试了一下,如果append没有超过切片容量的话是修改原数组,如果超过切片的容量的话是更换数组,这个是怎么个机制?这样设计有点绕,是针对什么样的实际场景呢?
append函数更换底层数组,是不是等于这时候切片就是一个新的数组?
我测试了一下,如果append没有超过切片容量的话是修改原数组,如果超过切片的容量的话是更换数组,这个是怎么个机制?这样设计有点绕,是针对什么样的实际场景呢?
2018-01-07
首先明确 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"...)
举报