首頁 > 後端開發 > Golang > golang make和new區別

golang make和new區別

(*-*)浩
發布: 2019-12-03 11:19:53
原創
3090 人瀏覽過

golang make和new區別

make、new操作

#make用於內建類型(map、slice 和channel)的記憶體分配。 new用於各種類型的記憶體分配。     (推薦學習:go

內建函數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區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板