go的引用類型包含 slice
、map
烦味、channel
內(nèi)置函數(shù)new
和make
創(chuàng)建引用類型的區(qū)別:
new
:會根據(jù)類型的大小,分配該大小的零值空間岩遗,然后返回該空間首地址凤瘦,也就是指針蔬芥。
make
:會被編譯器翻譯成具體的創(chuàng)建函數(shù),由其分配內(nèi)存和初始化成員變量笔诵,返回對象乎婿,而非指針。
不要使用new
捍靠,永遠(yuǎn)用make
來構(gòu)造引用對象
如果你錯(cuò)誤的使用 new() 分配了一個(gè)引用對象森逮,你會獲得一個(gè)空引用的指針,相當(dāng)于聲明了一個(gè)未初始化的變量并且取了它的地址良风。
package main
import (
"fmt"
)
func main() {
a := make([]int, 3)
a[1] = 10
b := new([]int)
b[1] = 20 //error : invalid operation: b[1] (type *[]int does not support indexing)
}
我是咕咕雞闷供,一個(gè)還在不停學(xué)習(xí)的全棧工程師。
熱愛生活吊档,喜歡跑步唾糯,家庭是我不斷向前進(jìn)步的動(dòng)力。