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

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

什么時(shí)候應(yīng)該在Go中使用`new`?

什么時(shí)候應(yīng)該在Go中使用`new`?

Go
jeck貓 2021-04-01 14:15:58
在原始語言構(gòu)造中使用它似乎毫無意義,因?yàn)槟鸁o法指定任何類型的值func main() {    y := new([]float)    fmt.Printf("Len = %d", len(*y) ) // => Len = 0}對于stucts它使一個(gè)有點(diǎn)更有意義,但有什么說的區(qū)別y := new(my_stuct)和看似更簡潔y := &my_struct?并且由于您創(chuàng)建的任何內(nèi)容都是基于這些原語的,因此它們將被初始化為所述零值。那有什么意義呢?您什么時(shí)候想使用new()?對初學(xué)者的問題很抱歉,但是文檔并不總是那么清晰。
查看完整描述

2 回答

?
富國滬深

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

您不能new像代碼示例中那樣使用切片和地圖,而必須使用以下make命令make([]float, 100)

兩者new(MyStruct)&MyStruct{}都執(zhí)行相同的操作,因?yàn)槿绻褂茫Λ@得它們的地址,Go將在堆上分配值。有時(shí),代碼只是以一種或另一種方式更好地表達(dá)了其意圖。

Go沒有對構(gòu)造函數(shù)的內(nèi)置支持,因此通常您會(huì)將調(diào)用包裝new到一個(gè)函數(shù)中,例如NewMyStruct(),它將執(zhí)行所有必要的初始化。它還可以初始化私有字段或?qū)⒔Y(jié)構(gòu)隱藏在接口后面,以防止對象的用戶直接破壞其內(nèi)部。當(dāng)您在添加/刪除/重新命名/重新排序字段時(shí)不需要更改所有用戶時(shí),通過這種方式還可以更輕松地演化結(jié)構(gòu)的結(jié)構(gòu)。


查看完整回答
反對 回復(fù) 2021-04-26
?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

make僅適用于地圖,切片和通道以及復(fù)合文字,例如type{}僅適用于結(jié)構(gòu),數(shù)組,切片和地圖。對于其他類型,您將必須使用new獲取指向新分配實(shí)例的指針(如果您不想使用更長的實(shí)例var v T; f(&v))。


我想如果要初始化一個(gè)結(jié)構(gòu),這很有用:


typedef foo struct {

    bar *int

}

v := foo{bar: new(int)}


查看完整回答
反對 回復(fù) 2021-04-26
  • 2 回答
  • 0 關(guān)注
  • 500 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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