Go語(yǔ)言中make和new函數(shù)的用法與區(qū)別
相同點(diǎn):
make和new都是用來(lái)創(chuàng)建分配類(lèi)型內(nèi)存的。
不同點(diǎn):
先看下面的代碼
package main
import "fmt"
func main(){
var i *int
var x = 10
*i=x
fmt.Println(*i)
}編譯過(guò)程會(huì)出錯(cuò)
panic: runtime error: invalid memory address or nil pointer dereference <br data-filtered="filtered">[signal 0xc0000005 code=0x1 addr=0x0 pc=0x48b576]
我們的想法是把 10 賦值 i指向的地址,但是這里由于 *i 沒(méi)有初始化,所以并不知道 *i的地址是什么,如果直接 *i的賦值為10,那么肯定是不行的(10這個(gè)地址沒(méi)有)
所以要想使用 *i,需要把 x的地址給i,修改成如下代碼
var i *int var x = 10 i=&x fmt.Println(*i)
補(bǔ)充: * 代表取地址里內(nèi)容, &代表取地址
或者使用 new 進(jìn)行初始化,代碼如下:
var x = 10 var i *int i = new(int) *i=x fmt.Println(*i)
new的源代碼如下
它只接受一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)類(lèi)型,分配好內(nèi)存后,返回一個(gè)指向該類(lèi)型內(nèi)存地址的指針。同時(shí)請(qǐng)注意它同時(shí)把分配的內(nèi)存置為零,也就是類(lèi)型的零值。

make也是用于內(nèi)存分配的,但是和new不同,它只用于chan、map以及slice的內(nèi)存創(chuàng)建,
而且它返回的類(lèi)型就是這三個(gè)類(lèi)型本身,而不是他們的指針類(lèi)型,因?yàn)檫@三種類(lèi)型就是引用類(lèi)型,所以就沒(méi)有必要返回他們的指針了。
綜上:
二者都是內(nèi)存的分配(堆上)
區(qū)別1
- make只用于slice、map以及channel的初始化(非零值);
- new用于類(lèi)型的內(nèi)存分配,并且內(nèi)存置為零。
區(qū)別2
- make返回的還是這三個(gè)引用類(lèi)型本身;
- new返回的是指向類(lèi)型的指針。
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Go語(yǔ)言之重要數(shù)組類(lèi)型切片(slice)make,append函數(shù)解讀
- Go語(yǔ)言中new()和 make()的區(qū)別詳解
- GO語(yǔ)言make()分配用法實(shí)例
- go語(yǔ)言make初始化的實(shí)現(xiàn)
- GO語(yǔ)言make和new關(guān)鍵字的區(qū)別
- 詳解Go語(yǔ)言中make和new的區(qū)別
- Go語(yǔ)言使用make進(jìn)行內(nèi)存分配的代碼示例
- Go語(yǔ)言中make和new的區(qū)別及說(shuō)明
- Go語(yǔ)言中new與make的使用解讀
- Go語(yǔ)言make創(chuàng)建切片的五種方式
相關(guān)文章
一文帶你了解Go語(yǔ)言fmt標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中 fmt 標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容
這篇文章主要介紹了Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題
這篇文章主要介紹了golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Golang學(xué)習(xí)筆記之安裝Go1.15版本(win/linux/macos/docker安裝)
這篇文章主要介紹了Golang學(xué)習(xí)筆記之安裝Go1.15版本(win/linux/macos/docker安裝),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟
本文主要介紹了Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Go語(yǔ)言入門(mén)Go?Web?Fiber框架快速了解
這篇文章主要為大家介紹了Go語(yǔ)言入門(mén)Go?Web?Fiber框架的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Go語(yǔ)言基礎(chǔ)switch條件語(yǔ)句基本用法及示例詳解
這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)switch條件語(yǔ)句基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11

