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