91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言中make和new的區別是什么

發布時間:2020-06-21 11:44:02 來源:億速云 閱讀:391 作者:元一 欄目:編程語言

make、new

make用于內建類型(map、slice 和channel)的內存分配,golang分配內存有一個make函數,該函數第一個參數是類型,第二個參數是分配的空間,第三個參數是預留分配空間。

new用于各種類型的內存分配。new(T) 為一個 T 類型新值分配空間并將此空間初始化為 T 的零值,返回的是新值的地址,也就是 T 類型的指針 *T,該指針指向 T 的新分配的零值。

內建函數new本質上說跟其它語言中的同名函數功能一樣:new(T)分配了零值填充的T類型的內存空間,并且返回其地址,即一個*T類型的值。

用Go的術語說,它返回了一個指針,指向新分配的類型T的零值。有一點非常重要:

new返回指針。

內建函數make(T, args)與new(T)有著不同的功能,make只能創建slice、map和channel,并且返回一個有初始值(非零)的T類型,而不是*T。本質來講,導致這三個類型有所不同的原因是指向數據結構的引用在使用前必須被初始化。

例如,一個slice,是一個包含指向數據(內部array)的指針、長度和容量的三項描述符;在這些項目被初始化之前,slice為nil。對于slice、map和channel來說,make初始化了內部的數據結構,填充適當的值。

make返回初始化后的(非零)值。

代碼示例:

var map1 map[string]string = make(map[string]string)
    fmt.Println(map1)
    fmt.Println(map1 == nil)

    var map2 *map[string]string = new(map[string]string)
    fmt.Println(map2)
    fmt.Println(map2 == nil)
    fmt.Println(*map2)
    fmt.Println(*map2 == nil)
    //    var map1 map[string]string
    map1["aaa"] = "AAA"
    map1["bbb"] = "BBB"
    map1["ccc"] = "CCC"
    fmt.Println(map1)
    fmt.Println(len(map1))

輸出:

map[]
false
&map[]
false
map[]
true
map[bbb:BBB ccc:CCC aaa:AAA]
Success: process exited with code 0.

以上就是golang make和new區別的詳細內容,更多請關注億速云其它相關文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

马公市| 资讯| 黎平县| 邹平县| 南城县| 余江县| 五大连池市| 大庆市| 嘉义市| 上饶市| 贵南县| 临泉县| 罗平县| 新和县| 东莞市| 蒲江县| 慈溪市| 郁南县| 伊宁县| 呼伦贝尔市| 正安县| 新民市| 禹州市| 和田县| 江城| 乡宁县| 平阳县| 建湖县| 那坡县| 武穴市| 三门峡市| 长汀县| 监利县| 崇明县| 曲周县| 托里县| 九江市| 邢台县| 资源县| 昌江| 西乡县|