詳解golang中make與new的異同點(diǎn)和用法
make介紹
在Go語(yǔ)言中,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è)是長(zhǎng)度。對(duì)于切片,還可以提供一個(gè)可選的容量參數(shù):
slice := make([]int, 5, 10) // 創(chuàng)建一個(gè)長(zhǎng)度為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語(yǔ)言中,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語(yǔ)言中進(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: 接受類型和長(zhǎng)度等參數(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)文章
golang?pprof?監(jiān)控系列?go?trace統(tǒng)計(jì)原理與使用解析
這篇文章主要為大家介紹了golang?pprof?監(jiān)控系列?go?trace統(tǒng)計(jì)原理與使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
基于Go+WebSocket實(shí)現(xiàn)實(shí)時(shí)通信功能
在互聯(lián)網(wǎng)應(yīng)用程序中,實(shí)時(shí)通信是一種非常重要的功能,WebSocket 是一種基于 TCP 的協(xié)議,它允許客戶端和服務(wù)器之間進(jìn)行雙向通信,本文將介紹如何使用 Golang 創(chuàng)建單獨(dú)的 WebSocket 會(huì)話,以實(shí)現(xiàn)實(shí)時(shí)通信功能,需要的朋友可以參考下2023-10-10
Go語(yǔ)言defer語(yǔ)句的三種機(jī)制整理
在本篇文章里小編給大家分享的是一篇關(guān)于Go語(yǔ)言defer語(yǔ)句的三種機(jī)制整理,需要的朋友們學(xué)習(xí)下吧。2020-03-03
Goland使用delve進(jìn)行遠(yuǎn)程調(diào)試的詳細(xì)教程
網(wǎng)上給出的使用delve進(jìn)行遠(yuǎn)程調(diào)試,都需要先在本地交叉編譯或者在遠(yuǎn)程主機(jī)上編譯出可運(yùn)行的程序,然后再用delve在遠(yuǎn)程啟動(dòng)程序,本教程會(huì)將上面的步驟簡(jiǎn)化為只需要兩步,1,在遠(yuǎn)程運(yùn)行程序2,在本地啟動(dòng)調(diào)試,需要的朋友可以參考下2024-08-08
go語(yǔ)言中數(shù)據(jù)接口set集合的實(shí)現(xiàn)
set集合是一種常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它代表了一個(gè)唯一元素的集合,本文主要介紹了set的基本特性,包括唯一性、無(wú)序性、可變性和集合運(yùn)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10
詳解如何使用go-acme/lego實(shí)現(xiàn)自動(dòng)簽發(fā)證書(shū)
這篇文章主要為大家詳細(xì)介紹了如何使用?go-acme/lego?的客戶端或庫(kù)完成證書(shū)的自動(dòng)簽發(fā),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
Go標(biāo)識(shí)符命名規(guī)則與最佳實(shí)踐指南
在Go語(yǔ)言中,標(biāo)識(shí)符(Identifiers)是用來(lái)命名變量、函數(shù)、類型等的名稱,遵循良好的命名規(guī)則和最佳實(shí)踐對(duì)于編寫(xiě)可讀、可維護(hù)的代碼至關(guān)重要,本文介紹Go標(biāo)識(shí)符命名規(guī)則與最佳實(shí)踐指南,感興趣的朋友跟隨小編一起看看吧2026-07-07
Go語(yǔ)言中Redis緩存與本地內(nèi)存緩存實(shí)戰(zhàn)
在現(xiàn)代高并發(fā)系統(tǒng)中,緩存技術(shù)是提升性能和降低數(shù)據(jù)庫(kù)壓力的關(guān)鍵手段,本文將為大家介紹一下Redis緩存與本地內(nèi)存緩存的具體應(yīng)用,需要的可以了解下2025-03-03

