nil
- nil與其他語(yǔ)言的null不同浸锨,nil一般作為指針唇聘,切片,map柱搜,channel迟郎,函數(shù)和接口的零值。
- nil標(biāo)識(shí)符是不能比較的聪蘸。
- nil沒(méi)有默認(rèn)類(lèi)型宪肖,不能使用" %T "打印其類(lèi)型炒嘲。
- 不同類(lèi)型的nil占用的內(nèi)存大小是不一樣的,而且和編譯器和架構(gòu)有關(guān)匈庭。
var p *int
fmt.Printf("sizeof %v:%d\n", p, unsafe.Sizeof(p)) // 8
var s []int
fmt.Printf("sizeof %v:%d\n", s, unsafe.Sizeof(s)) // 24
var m map[int]string
fmt.Printf("sizeof %v:%d\n", m, unsafe.Sizeof(m)) // 8
var c chan string
fmt.Printf("sizeof %v:%d\n", c, unsafe.Sizeof(c)) // 8
var f func()
fmt.Printf("sizeof %v:%d\n", f, unsafe.Sizeof(f)) // 8
var i interface{}
fmt.Printf("sizeof %v:%d\n", i, unsafe.Sizeof(i)) // 16
new和make
new 可以為任意指定類(lèi)型分配空間夫凸。make只能為slice,map阱持,channel分配空間
new分配的空間會(huì)被清空夭拌。make分配的空間會(huì)被初始化為初始值。
new分配返回指針(*Type)衷咽。make分配返回引用(Type)鸽扁。