真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

本篇內(nèi)容主要講解“GO如何初始化數(shù)據(jù)結(jié)構(gòu)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“GO如何初始化數(shù)據(jù)結(jié)構(gòu)”吧!

成都創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)德城,十載網(wǎng)站建設(shè)經(jīng)驗,價格優(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 確實支持創(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)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章題目:GO如何初始化數(shù)據(jù)結(jié)構(gòu)
文章URL:http://weahome.cn/article/ggeeso.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部