與其餘語言中的同名方法不一樣是,go中的new不會初始化內存,而僅僅是賦予零值,也就是說返回一個新分配的類型的零值的指針(*T)。這樣建立的變量能夠不用進一步初始化就能夠直接使用。指針
但有時須要初始化爲非零值則能夠用composite literal方式。
filed name 可根據是否須要按key:value 方式填寫。code
`new(File)`and`&File{}`
是相同的表達內存
make只用來建立slice, map, 和channel,而且返回的初始化的值(T)
而非零值(*T),由於這幾種類型的都須要初始化才能使用。ci
make([]int, 10, 100)
返回的是length 10 , capacity100的slice, 而new([]int)返回一個指向零值的slice。it
下面的例子能夠看出區別io
var p *[]int = new([]int) // allocates slice structure; \*p == nil; rarely useful var v []int = make([]int, 100) // the slice v now refers to a new array of 100 ints // Unnecessarily complex: var p *[]int = new([]int) *p = make([]int, 100, 100) // Idiomatic: v := make([]int, 100)