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

溫馨提示×

溫馨提示×

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

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

GO如何初始化數據結構

發布時間:2023-01-03 18:00:49 來源:億速云 閱讀:123 作者:iii 欄目:編程語言

本篇內容主要講解“GO如何初始化數據結構”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“GO如何初始化數據結構”吧!

使用 golang 進行編碼過程中,你們都是如何初始化數據結構的呢?

GO 里面提供了 2 個關鍵字來進行初始化數據結構

  • new

  • make

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

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

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

make

make 是 golang 提供的關鍵字,主要是用于初始化內置的數據結構,不能初始化自定義的數據結構 , make 可以初始化的數據類型有:

  • slice 切片

  • map hash表

  • channel 通道

例如我們初始化的時候就可以這樣寫

  • 初始化一個切片,填入 len 值, cap 值,切片底層的數據結構除了這倆值以外,還有一個指針,指向的是一個底層數組

  • 初始化一個 map,map 的底層是指向一個 hmap 的結構體指針,結構體里面的具體成員感興趣的 xdm 可以翻看我的歷史文章

  • 初始化一個通道 ch,這個 ch 是指向一個 hchan 的結構體指針,同樣也可翻看我的歷史文章看細節

strs := make([]string, 0, 10)myMap := make(map[string]string, 10)ch := make(chan struct{}, 10)

我們查看 make 的源碼解釋可以看到,make 確實支持創建和初始上述 3 種類型

GO如何初始化數據結構

根據解釋,我們知道,make 的返回值的類型與填入參數的類型保持一致,咱們填入的是切片類型,那么返回值就是切片類型,填入其他類型對應返回值也是我們期望的類型,沒毛病

new

那么為什么有了 make 做數據結構的初始化,還需要 new 干啥?

細心的 胖魚 可以看出來,前面說到了  make 只適用于初始化 golang 提供的內置數據結構,對于自定義的數據結構,就捉襟見肘了 , 這個時候還是需要 new  出馬擺平了

用 new 初始化數據結構可以這樣寫:

  • 自定義一個結構體,里面 2 個成員, age 和 name

  • 使用 new 對 T 最初始化,返回一個結構體的指針

type T struct{
    age int
    name string}func main(){

    t := new(T)
    fmt.Println("t.name == ",t.name)
    fmt.Println("t.age == ",t.age)}

程序執行效果如下:

# go run main.got.name ==t.age ==  0

果然是給我初始化了數據結構,只不過數據都是 零值

當然我們也可以這樣寫:

func main(){

    a := new(int)
    fmt.Println("a == ",a)
    fmt.Println("*a == ",*a)}

程序執行效果如下:

# go run main.goa ==  0xc420018078
*a ==  0

根據程序運行結果,我們知道 new 返回的是一個指針,且這個指針指向的內存地址上對應的值是一個該類型的 零值

瞅一眼 new 源碼說明

GO如何初始化數據結構

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

因此,我們上面看到的 new 出來的數據結構,打印出來的數據都是對應類型的零值

make 和 new 的區別

最后再來梳理一下 make 和 new 的區別,加深印象

  • make 只能用來初始化內置數據類型

    • slice

    • map

    • chan

      而 new 可以分配任意類型的數據(包括自定義數據類型)

  • make 返回的是引用,是 Type 類型,new 返回的是指針,是 *Type 類型的

到此,相信大家對“GO如何初始化數據結構”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

go
AI

刚察县| 通渭县| 易门县| 巫溪县| 紫金县| 东丰县| 东台市| 星子县| 民和| 宝兴县| 崇礼县| 文昌市| 镇雄县| 营口市| 泰兴市| 怀化市| 象州县| 奉节县| 射洪县| 香港| 永吉县| 崇仁县| 新邵县| 广饶县| 南皮县| 台东县| 华亭县| 自治县| 通海县| 永定县| 卓尼县| 临邑县| 金平| 韶关市| 衡水市| 邛崃市| 巴彦淖尔市| 垦利县| 喀什市| 乐清市| 天等县|