append函數(shù)更換底層數(shù)組,是不是等于這時(shí)候切片就是一個(gè)新的數(shù)組?
append函數(shù)更換底層數(shù)組,是不是等于這時(shí)候切片就是一個(gè)新的數(shù)組?
我測(cè)試了一下,如果append沒有超過(guò)切片容量的話是修改原數(shù)組,如果超過(guò)切片的容量的話是更換數(shù)組,這個(gè)是怎么個(gè)機(jī)制?這樣設(shè)計(jì)有點(diǎn)繞,是針對(duì)什么樣的實(shí)際場(chǎng)景呢?
2018-01-07
首先明確 append 為Go的預(yù)聲明標(biāo)識(shí)符(也就是俗稱內(nèi)置函數(shù)),切片僅僅是對(duì)go數(shù)組的抽象。
內(nèi)建函數(shù)append將元素追加到切片的末尾。若它有足夠的容量,其目標(biāo)就會(huì)重新切片以容納新的元素。否則,就會(huì)分配一個(gè)新的基本數(shù)組。append返回更新后的切片,因此必須存儲(chǔ)追加后的結(jié)果。
作為特例,可以向一個(gè)字節(jié)切片append字符串,如下:
slice?=?append([]byte("hello?"),?"world"...)