go new和make區(qū)別
new用來分配內(nèi)存囚似,但與其他語言中的同名函數(shù)不同咕幻,它不會初始化內(nèi)存,只會講內(nèi)存置零糯俗;也就是說尿褪,new(T)會為類型為T的新項分配已置零的內(nèi)存空間,并返回他的地址得湘,也就是一個類型為T的值杖玲。用Go的術(shù)語來說,它返回一個指針忽刽,改指針指向新分配的天揖,類型為T的零值;
make的目的不同于new跪帝,它只用于slice,map,channel的創(chuàng)建今膊,并返回類型為T(非指針)的已初始化(非零值)的值;出現(xiàn)這種差異的原因在于伞剑,這三種類型本質(zhì)上為引用類型斑唬,它們在使用前必須初始化;
小結(jié):
new和make都在堆上分配內(nèi)存黎泣,但是它們的行為不同恕刘,適用于不同的類型。
new(T) 為每個新的類型T分配一片內(nèi)存抒倚,初始化為 0 并且返回類型為T的內(nèi)存地址:這種方法 返回一個指向類型為 T褐着,值為 0 的地址的指針,它適用于值類型如數(shù)組和結(jié)構(gòu)體托呕;它相當(dāng)于 &T{}含蓉。
make(T) 返回一個類型為 T 的初始值,它只適用于3種內(nèi)建的引用類型:slice项郊、map 和 channel馅扣。