一、適用類型
make:make只能用于創(chuàng)建slice、map和channel類型的對(duì)象,這三種類型屬于引用類型。new:new用于創(chuàng)建所有類型的對(duì)象,返回的是指向新分配的零值對(duì)象的指針,適用于所有類型。二、返回類型
make:make返回的是一個(gè)被初始化后的(非零值)的引用類型對(duì)象,而不是指針。new:new返回的是一個(gè)指向新分配的零值對(duì)象的指針。三、用途
make:make用于創(chuàng)建slice、map和channel類型的對(duì)象,并對(duì)其進(jìn)行初始化。new:new用于創(chuàng)建各種類型的對(duì)象,返回的對(duì)象是該類型的指針,并且該對(duì)象的值為該類型的零值。四、內(nèi)存分配
make:對(duì)于slice、map和channel類型,make會(huì)進(jìn)行內(nèi)存分配,并初始化對(duì)象的內(nèi)部結(jié)構(gòu),返回一個(gè)可用的對(duì)象。new:new只是進(jìn)行零值內(nèi)存分配,不會(huì)初始化對(duì)象的內(nèi)部結(jié)構(gòu),返回的對(duì)象是該類型的指針,并且值為零值。五、參數(shù)類型
make:make接收的參數(shù)是具體的類型和長度等信息,用于創(chuàng)建特定類型的對(duì)象。new:new接收的參數(shù)是一個(gè)類型,用于創(chuàng)建該類型的零值對(duì)象。六、用法
make:常用于創(chuàng)建slice、map和channel,并進(jìn)行初始化,以便直接使用。new:常用于創(chuàng)建各種類型的對(duì)象,并獲取指向新對(duì)象的指針,通常用于獲取對(duì)象的地址。七、返回值
make:返回創(chuàng)建的對(duì)象,類型為所創(chuàng)建的引用類型。new:返回創(chuàng)建對(duì)象的指針,類型為指向所創(chuàng)建對(duì)象類型的指針。八、錯(cuò)誤處理
make:在運(yùn)行時(shí)對(duì)于slice、map和channel類型,如果長度參數(shù)為負(fù)值,或者其他參數(shù)出現(xiàn)不合法情況,會(huì)引發(fā)運(yùn)行時(shí)錯(cuò)誤。new:new不會(huì)進(jìn)行運(yùn)行時(shí)錯(cuò)誤處理,只進(jìn)行零值內(nèi)存分配。延伸閱讀
Go語言的特點(diǎn)
簡(jiǎn)潔易用:Go語言擁有清晰簡(jiǎn)潔的語法,易于學(xué)習(xí)和使用。它摒棄了一些冗余的語法元素,使得代碼更加簡(jiǎn)明和易讀。并發(fā)支持:Go語言內(nèi)置了輕量級(jí)的并發(fā)機(jī)制,即Go協(xié)程(goroutine)和通道(channel)。開發(fā)者可以輕松地使用這些特性來編寫高效的并發(fā)代碼,實(shí)現(xiàn)并發(fā)編程和并行計(jì)算。高性能:Go語言的編譯器和運(yùn)行時(shí)環(huán)境針對(duì)性能做了優(yōu)化,使得生成的機(jī)器碼具有很高的執(zhí)行效率。Go語言還支持垃圾回收(Garbage Collection),減輕了開發(fā)者的內(nèi)存管理負(fù)擔(dān)。跨平臺(tái):Go語言可以直接編譯生成獨(dú)立的二進(jìn)制文件,無需依賴外部的運(yùn)行時(shí)庫。這使得Go語言程序可以方便地在不同的操作系統(tǒng)上進(jìn)行部署和運(yùn)行,如Windows、Linux、macOS等。內(nèi)置工具:Go語言附帶了一系列的工具,如格式化工具(gofmt)、文檔生成工具(godoc)、測(cè)試工具(go test)等。這些工具能夠提供代碼的一致性、可讀性和可維護(hù)性。強(qiáng)大的標(biāo)準(zhǔn)庫:Go語言提供了豐富而強(qiáng)大的標(biāo)準(zhǔn)庫,覆蓋了網(wǎng)絡(luò)、文件、數(shù)據(jù)庫、加密等各個(gè)領(lǐng)域。開發(fā)者可以直接使用這些標(biāo)準(zhǔn)庫來實(shí)現(xiàn)各種常見的功能,提高開發(fā)效率。社區(qū)活躍:Go語言擁有一個(gè)活躍的社區(qū),提供了豐富的開源庫和框架,以滿足不同需求的開發(fā)。Go語言的社區(qū)還積極參與討論和改進(jìn),推動(dòng)了Go語言生態(tài)系統(tǒng)的發(fā)展。