日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang中的new和make的区别

發布時間:2025/6/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang中的new和make的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

new

這是一個用來分配內存的內建函數,但是與C++不一樣的是,它并不初始化內存,只是將其置零。也就是說,new(T)會為T類型的新項目,分配被置零的存儲,并且返回它的地址,一個類型為*T的值。在Go的術語中,其返回一個指向新分配的類型為T的指針,這個指針指向的內容的值為零(zero value)。注意并不是指針為零。
Go語言中的對象沒有C++中的構造函數,如果用C來描述,Go中的new大概相當于:

T *t = (T*)malloc(sizeof(T))

memset(t, 0,?sizeof(T))

其實,上面的描可能也不是很準確,也許用*t=zerovalue更準確。因為對于不同的數據類型,零值的意義是完全不一樣的。比如,對于bool類型,零值為false;int的零值為0;string的零值是空字符串

make

內建函數make(T,?args)與new(T)的用途不一樣。它只用來創建slice,map和channel,并且返回一個初始化的(而不是置零),類型為T的值(而不是*T)。之所以有所不同,是因為這三個類型的背后引用了使用前必須初始化的數據結構。例如,slice是一個三元描述符,包含一個指向數據(在數組中)的指針,長度,以及容量,在這些項被初始化之前,slice都是nil的。對于slice,map和channel,make初始化這些內部數據結構,并準備好可用的值

記住make只用于map,slice和channel,并且不返回指針。

要獲得一個顯式的指針,使用new進行分配,或者顯式地使用一個變量的地址

總結

以上是生活随笔為你收集整理的golang中的new和make的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。