第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我為什么要make()或new()?

我為什么要make()或new()?

Go
開滿天機(jī) 2021-05-03 22:18:53
簡介文檔中有很多段落專門介紹了new()和之間的區(qū)別make(),但是實際上,您可以在本地范圍內(nèi)創(chuàng)建對象并將其返回。為什么要使用一對分配器?
查看完整描述

3 回答

?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗 獲得超13個贊

Go有多種內(nèi)存分配和值初始化方式:


&T{...},&someLocalVar,new,make


創(chuàng)建復(fù)合文字時也可能發(fā)生分配。


new可以用來分配整數(shù)等值,&int是非法的:


new(Point)

&Point{}      // OK

&Point{2, 3}  // Combines allocation and initialization


new(int)

&int          // Illegal


// Works, but it is less convenient to write than new(int)

var i int

&i

通過查看以下示例new,make可以看到和之間的區(qū)別:


p := new(chan int)   // p has type: *chan int

c := make(chan int)  // c has type: chan int

假設(shè)Go沒有newand make,但是它具有內(nèi)置功能NEW。然后,示例代碼將如下所示:


p := NEW(*chan int)  // * is mandatory

c := NEW(chan int)

這* 將是強(qiáng)制性的,因此:


new(int)        -->  NEW(*int)

new(Point)      -->  NEW(*Point)

new(chan int)   -->  NEW(*chan int)

make([]int, 10) -->  NEW([]int, 10)


new(Point)  // Illegal

new(int)    // Illegal

是的,合并new和make成一個單一的內(nèi)置功能是可能的。但是,與具有兩個內(nèi)置函數(shù)相比,單個內(nèi)置函數(shù)可能會在新的Go程序員中引起更多的混亂。


考慮到以上所有方面,似乎更適合new并將make其分開。


查看完整回答
反對 回復(fù) 2021-05-10
?
揚(yáng)帆大魚

TA貢獻(xiàn)1799條經(jīng)驗 獲得超9個贊

您可以做的事情make是您無法做的其他任何事情:

  • 建立頻道

  • 創(chuàng)建一個預(yù)先分配了空間的地圖

  • 創(chuàng)建具有預(yù)分配空間或len!= cap的切片

證明有一點困難new。使它變得更容易的主要事情是創(chuàng)建指向非復(fù)合類型的指針。以下兩個功能是等效的。簡而言之:

func newInt1() *int { return new(int) }


func newInt2() *int {

    var i int

    return &i

}


查看完整回答
反對 回復(fù) 2021-05-10
?
哆啦的時光機(jī)

TA貢獻(xiàn)1779條經(jīng)驗 獲得超6個贊

make函數(shù)僅分配和初始化slice,map或chan類型的對象。像一樣new,第一個參數(shù)是一個類型。但是,它也可能需要第二個參數(shù),即大小。與new不同,make的返回類型與其參數(shù)的類型相同,而不是指向它的指針。并且分配的值被初始化(不像new那樣設(shè)置為零值)。原因是slice,map和chan是數(shù)據(jù)結(jié)構(gòu)。它們需要初始化,否則將無法使用。這就是new()和make()需要不同的原因。

以下來自Effective Go的示例非常清楚:

p *[]int = new([]int) // *p = nil, which makes p uselessv []int = make([]int, 100) // creates 
v structure that has pointer to an array, length field, and capacity field. So, v is immediately usable



查看完整回答
反對 回復(fù) 2021-05-10
  • 3 回答
  • 0 關(guān)注
  • 288 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號