成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

GO如何初始化數(shù)據(jù)結(jié)構(gòu)

本篇內(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

使用 golang 進(jìn)行編碼過程中,你們都是如何初始化數(shù)據(jù)結(jié)構(gòu)的呢?

GO 里面提供了 2 個關(guān)鍵字來進(jìn)行初始化數(shù)據(jù)結(jié)構(gòu)

  • new

  • make

不過有時候我也會直接使用花括號的方式直接就初始化,例如這樣:

name := []string{"xiaomotong","bob","marry"}

上面這種情況,是初始化的時候已經(jīng)明確好了需要填的值,可以使用上面這種做法,不過工作中大多數(shù)情況初始化的時候,數(shù)據(jù)還是未知的,大部分時間還是會使用上述兩種方式

make

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 種類型

GO如何初始化數(shù)據(jù)結(jié)構(gòu)

根據(jù)解釋,我們知道,make的返回值的類型與填入?yún)?shù)的類型保持一致,咱們填入的是切片類型,那么返回值就是切片類型,填入其他類型對應(yīng)返回值也是我們期望的類型,沒毛病

new

那么為什么有了 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)的值是一個該類型的 零值

瞅一眼 new 源碼說明

GO如何初始化數(shù)據(jù)結(jié)構(gòu)

golang 源碼中說到, new 的第一個參數(shù)是 數(shù)據(jù)類型,不是一個值,并且 new的返回值是一個根據(jù)參數(shù)類型分配零值內(nèi)存的指針

因此,我們上面看到的 new 出來的數(shù)據(jù)結(jié)構(gòu),打印出來的數(shù)據(jù)都是對應(yīng)類型的零值

make 和 new 的區(qū)別

最后再來梳理一下 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)

成都網(wǎng)站建設(shè)公司
乌兰浩特市| 锡林浩特市| 白沙| 三河市| 通江县| 泾川县| 淮安市| 淄博市| 江孜县| 翼城县| 苏尼特左旗| 西平县| 云和县| 汶上县| 平湖市| 五寨县| 承德市| 澳门| 大兴区| 乌拉特前旗| 蒲江县| 灵川县| 盐城市| 象州县| 隆林| 江油市| 读书| 民权县| 阜新| 普兰店市| 当雄县| 公主岭市| 土默特左旗| 四川省| 疏附县| 漠河县| 长乐市| 宁津县| 裕民县| 荔波县| 富平县|