詳解golang中make與new的異同點(diǎn)和用法
make介紹
在Go語言中,make
是一個(gè)用于創(chuàng)建切片、映射(map)和通道(channel)等引用類型的內(nèi)置函數(shù)。make
的主要作用是為這些引用類型分配內(nèi)存并進(jìn)行初始化。
用法:
1. 創(chuàng)建切片(slice):
slice := make([]int, 5) // 創(chuàng)建一個(gè)包含5個(gè)整數(shù)的切片
make
接受兩個(gè)參數(shù),第一個(gè)是類型,第二個(gè)是長度。對(duì)于切片,還可以提供一個(gè)可選的容量參數(shù):
slice := make([]int, 5, 10) // 創(chuàng)建一個(gè)長度為5,容量為10的切片
2. 創(chuàng)建映射(map):
myMap := make(map[string]int) // 創(chuàng)建一個(gè)字符串到整數(shù)的映射
3. 創(chuàng)建通道(channel):
ch := make(chan int) // 創(chuàng)建一個(gè)整數(shù)類型的通道
注意事項(xiàng):
make
只能用于引用類型的數(shù)據(jù)結(jié)構(gòu),不能用于值類型(例如結(jié)構(gòu)體)的創(chuàng)建。make
返回被初始化的引用類型實(shí)例,而不是指針。- 對(duì)于切片和映射,
make
除了分配內(nèi)存,還會(huì)初始化內(nèi)部的數(shù)據(jù)結(jié)構(gòu),確保它們可以被直接使用。 - 對(duì)于通道,
make
會(huì)創(chuàng)建并返回一個(gè)未被緩沖的通道。
總體而言,make
主要用于創(chuàng)建引用類型并進(jìn)行初始化,以確保它們可以被正確地使用。
new介紹
在Go語言中,new
是一個(gè)用于為值類型分配內(nèi)存并返回指向新分配的零值實(shí)例的指針的內(nèi)置函數(shù)。new
主要用于創(chuàng)建值類型的實(shí)例,例如結(jié)構(gòu)體。以下是 new
的基本用法和注意事項(xiàng):
用法:
1. 創(chuàng)建值類型實(shí)例:
ptr := new(int) // 創(chuàng)建一個(gè)整數(shù)類型的指針,指向新分配的零值整數(shù)
2. 創(chuàng)建結(jié)構(gòu)體實(shí)例:
type MyStruct struct { Field1 int Field2 string } instance := new(MyStruct) // 創(chuàng)建一個(gè) MyStruct 類型的指針,指向新分配的零值結(jié)構(gòu)體
注意事項(xiàng):
new
返回一個(gè)指向新分配內(nèi)存的零值實(shí)例的指針。- 對(duì)于值類型,
new
分配的內(nèi)存會(huì)被初始化為零值。 new
接受一個(gè)參數(shù),即要分配內(nèi)存的類型,并返回一個(gè)指向該類型的零值的指針。new
不適用于引用類型(如切片、映射和通道),只能用于值類型的創(chuàng)建。new
分配的內(nèi)存不會(huì)被清理,需要程序員負(fù)責(zé)釋放。
總體而言,new
主要用于為值類型分配內(nèi)存,并返回一個(gè)指向新分配的零值實(shí)例的指針。在實(shí)際使用時(shí),根據(jù)需要選擇使用 new
還是直接聲明和初始化。
make與new的異同
make
和 new
都是用于在Go語言中進(jìn)行內(nèi)存分配的內(nèi)置函數(shù),但它們的用途和行為有一些關(guān)鍵的區(qū)別。
相同點(diǎn):
- 內(nèi)存分配: 兩者都用于在堆上分配內(nèi)存。
不同點(diǎn):
1. 適用類型:
make
: make: 只用于slice
、map
以及channel
的初始化。
slice := make([]int, 5)
new
: 用于創(chuàng)建值類型的實(shí)例,例如結(jié)構(gòu)體。返回一個(gè)指向新分配的零值實(shí)例的指針。
ptr := new(int)
2. 返回類型:
make
: 返回被初始化的引用類型實(shí)例,而不是指針。new
: 返回一個(gè)指向新分配的零值實(shí)例的指針。
3. 參數(shù):
make
: 接受類型和長度等參數(shù),用于初始化引用類型的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
slice := make([]int, 5)
new
: 只接受類型參數(shù),返回一個(gè)指向該類型的零值的指針。
ptr := new(int)
4. 初始化:
make
: 除了分配內(nèi)存,還會(huì)初始化引用類型的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。new
: 分配的內(nèi)存會(huì)被初始化為零值。
總結(jié):
- 使用
make
主要用于初始化引用類型,確保它們可以被直接使用。 - 使用
new
主要用于為值類型分配內(nèi)存,返回一個(gè)指向新分配的零值實(shí)例的指針。
選擇使用 make
還是 new
取決于您要?jiǎng)?chuàng)建的數(shù)據(jù)結(jié)構(gòu)的類型和初始化需求。
以上就是詳解golang中make與new的異同點(diǎn)和用法的詳細(xì)內(nèi)容,更多關(guān)于golang make與new異同和用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
用go寫的五子棋預(yù)測(cè)算法的實(shí)現(xiàn)
這篇文章主要介紹了用go寫的五子棋預(yù)測(cè)算法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解
這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫
這篇文章主要介紹了Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫,Golang?程序在運(yùn)行時(shí)加載C動(dòng)態(tài)庫的技術(shù),跳過了Golang項(xiàng)目編譯階段需要鏈接C動(dòng)態(tài)庫的過程,提高了Golang項(xiàng)目開發(fā)部署的靈活性2022-07-07go貨幣計(jì)算時(shí)如何避免浮點(diǎn)數(shù)精度問題
在開發(fā)的初始階段,我們經(jīng)常會(huì)遇到“浮點(diǎn)數(shù)精度”和“貨幣值表示”的問題,那么在golang中如何避免這一方面的問題呢,下面就跟隨小編一起來學(xué)習(xí)一下吧2024-02-02