go new和make區(qū)別
new用來分配內(nèi)存,但與其他語言中的同名函數(shù)不同,它不會(huì)初始化內(nèi)存,只會(huì)講內(nèi)存置零;也就是說,new(T)會(huì)為類型為T的新項(xiàng)分配已置零的內(nèi)存空間,并返回他的地址,也就是一個(gè)類型為T的值。用Go的術(shù)語來說,它返回一個(gè)指針,改指針指向新分配的,類型為T的零值;
make的目的不同于new,它只用于slice,map,channel的創(chuàng)建,并返回類型為T(非指針)的已初始化(非零值)的值;出現(xiàn)這種差異的原因在于,這三種類型本質(zhì)上為引用類型,它們?cè)谑褂们氨仨毘跏蓟?br>
小結(jié):
new和make都在堆上分配內(nèi)存,但是它們的行為不同,適用于不同的類型。
new(T) 為每個(gè)新的類型T分配一片內(nèi)存,初始化為 0 并且返回類型為T的內(nèi)存地址:這種方法 返回一個(gè)指向類型為 T,值為 0 的地址的指針,它適用于值類型如數(shù)組和結(jié)構(gòu)體;它相當(dāng)于 &T{}。
make(T) 返回一個(gè)類型為 T 的初始值,它只適用于3種內(nèi)建的引用類型:slice、map 和 channel。