首頁  >  文章  >  後端開發  >  聊聊GO初始化資料結構的方法(附程式碼範例)

聊聊GO初始化資料結構的方法(附程式碼範例)

藏色散人
藏色散人轉載
2023-01-03 16:32:283372瀏覽

這篇文章跟大家介紹有關GO語言初始化資料結構的方法,GO裡面提供了2個關鍵字來進行初始化資料結構,下面一起看看怎麼使用吧~希望對大家有幫助。

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

GO 裡面提供了2 個關鍵字來進行初始化資料結構

  • #new
  • ##make

#new

不過有時候我也會直接用花括號的方式直接就初始化,例如這樣:
    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)

    我們查看聊聊GO初始化資料結構的方法(附程式碼範例)make

    的原始碼解釋可以看到,make 確實支援建立和初始上述

    3 種類型

    根據解釋,我們知道,

    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 返回的是一個指針,而這個指針指向的內存地址上對應的值是一個該類型的聊聊GO初始化資料結構的方法(附程式碼範例)零值

    瞅一眼new 原始碼說明

    golang 原始碼中說到, new 的第一個參數是資料類型,不是一個值,並且

    new

    #的回傳值是一個根據參數型別分配零值記憶體的指標

    因此,我們上面看到的new 出來的資料結構,列印出來的資料都是對應型別的零值
    • make 和new 的區別

        最後再來梳理一下make 和new 的區別,加深印象
      • make 只能用來初始化內建資料類型
      • slice
      • map

    • #chan
    • 而new 可以指派任意類型的資料(包括自訂資料型別)

    • make 回傳的是引用,是
    Type

    類型,new 回傳的是指針,是*Type 類型的

    #########【相關推薦:###Go影片教學###】                    ####

    以上是聊聊GO初始化資料結構的方法(附程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除