本篇內(nèi)容主要講解“GO如何初始化數(shù)據(jù)結(jié)構(gòu)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“GO如何初始化數(shù)據(jù)結(jié)構(gòu)”吧!
成都創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)德城,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
GO 里面提供了 2 個關(guān)鍵字來進(jìn)行初始化數(shù)據(jù)結(jié)構(gòu)
new
make
不過有時候我也會直接使用花括號的方式直接就初始化,例如這樣:
name := []string{"xiaomotong","bob","marry"}
上面這種情況,是初始化的時候已經(jīng)明確好了需要填的值,可以使用上面這種做法,不過工作中大多數(shù)情況初始化的時候,數(shù)據(jù)還是未知的,大部分時間還是會使用上述兩種方式
make 是 golang 提供的關(guān)鍵字,主要是用于初始化內(nèi)置的數(shù)據(jù)結(jié)構(gòu),不能初始化自定義的數(shù)據(jù)結(jié)構(gòu) , make 可以初始化的數(shù)據(jù)類型有:
slice 切片
map hash表
channel 通道
例如我們初始化的時候就可以這樣寫
初始化一個切片,填入 len 值, cap 值,切片底層的數(shù)據(jù)結(jié)構(gòu)除了這倆值以外,還有一個指針,指向的是一個底層數(shù)組
初始化一個 map,map 的底層是指向一個 hmap 的結(jié)構(gòu)體指針,結(jié)構(gòu)體里面的具體成員感興趣的 xdm 可以翻看我的歷史文章
初始化一個通道 ch,這個 ch 是指向一個 hchan 的結(jié)構(gòu)體指針,同樣也可翻看我的歷史文章看細(xì)節(jié)
strs := make([]string, 0, 10)myMap := make(map[string]string, 10)ch := make(chan struct{}, 10)
我們查看 make的源碼解釋可以看到,make 確實(shí)支持創(chuàng)建和初始上述 3 種類型
根據(jù)解釋,我們知道,make的返回值的類型與填入?yún)?shù)的類型保持一致,咱們填入的是切片類型,那么返回值就是切片類型,填入其他類型對應(yīng)返回值也是我們期望的類型,沒毛病
那么為什么有了 make 做數(shù)據(jù)結(jié)構(gòu)的初始化,還需要 new 干啥?
細(xì)心的 胖魚 可以看出來,前面說到了 make 只適用于初始化 golang 提供的內(nèi)置數(shù)據(jù)結(jié)構(gòu),對于自定義的數(shù)據(jù)結(jié)構(gòu),就捉襟見肘了 , 這個時候還是需要 new 出馬擺平了
用 new 初始化數(shù)據(jù)結(jié)構(gòu)可以這樣寫:
自定義一個結(jié)構(gòu)體,里面 2 個成員, age 和 name
使用 new 對 T 最初始化,返回一個結(jié)構(gòu)體的指針
type T struct{
age int
name string}func main(){
t := new(T)
fmt.Println("t.name == ",t.name)
fmt.Println("t.age == ",t.age)}
程序執(zhí)行效果如下:
# go run main.got.name ==t.age == 0
果然是給我初始化了數(shù)據(jù)結(jié)構(gòu),只不過數(shù)據(jù)都是 零值
當(dāng)然我們也可以這樣寫:
func main(){
a := new(int)
fmt.Println("a == ",a)
fmt.Println("*a == ",*a)}
程序執(zhí)行效果如下:
# go run main.goa == 0xc420018078
*a == 0
根據(jù)程序運(yùn)行結(jié)果,我們知道 new 返回的是一個指針,且這個指針指向的內(nèi)存地址上對應(yīng)的值是一個該類型的 零值
golang 源碼中說到, new 的第一個參數(shù)是 數(shù)據(jù)類型,不是一個值,并且 new的返回值是一個根據(jù)參數(shù)類型分配零值內(nèi)存的指針
因此,我們上面看到的 new 出來的數(shù)據(jù)結(jié)構(gòu),打印出來的數(shù)據(jù)都是對應(yīng)類型的零值
最后再來梳理一下 make 和 new 的區(qū)別,加深印象
make 只能用來初始化內(nèi)置數(shù)據(jù)類型
slice
map
chan
而 new 可以分配任意類型的數(shù)據(jù)(包括自定義數(shù)據(jù)類型)
make 返回的是引用,是 Type類型,new 返回的是指針,是 *Type類型的
到此,相信大家對“GO如何初始化數(shù)據(jù)結(jié)構(gòu)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站名稱:GO如何初始化數(shù)據(jù)結(jié)構(gòu)
轉(zhuǎn)載來于:http://jinyejixie.com/article30/ggeeso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站改版、網(wǎng)站制作、企業(yè)建站、小程序開發(fā)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)