[Go - note] go中new和make分配變量的區別

New

與其餘語言中的同名方法不一樣是,go中的new不會初始化內存,而僅僅是賦予零值,也就是說返回一個新分配的類型的零值的指針(*T)。這樣建立的變量能夠不用進一步初始化就能夠直接使用。指針

但有時須要初始化爲非零值則能夠用composite literal方式。
filed name 可根據是否須要按key:value 方式填寫。code

`new(File)`and`&File{}`

是相同的表達內存

Make

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)
相關文章
相關標籤/搜索