這篇文章跟大家介紹有關GO語言初始化資料結構的方法,GO裡面提供了2個關鍵字來進行初始化資料結構,下面一起看看怎麼使用吧~希望對大家有幫助。
GO 裡面提供了2 個關鍵字來進行初始化資料結構
name := []string{"xiaomotong","bob","marry"}
map hash表
channel 通道初始化一個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 種類型
的回傳值的類型與填入參數的類型保持一致,咱們填入的是切片類型,那麼傳回值就是切片類型,填入其他類型對應回傳值也是我們期望的型,沒毛病
new
那麼為什麼有了make 做資料結構的初始化,還需要new 幹啥?細心的胖魚可以看出來,前面說到了 make 只適用於初始化golang 提供的內建資料結構,對於自訂的資料結構,就捉襟見肘了, 這時候還是需要
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 原始碼說明
golang 原始碼中說到, new 的第一個參數是資料類型,不是一個值,並且
newmake 和new 的區別
map
而new 可以指派任意類型的資料(包括自訂資料型別)
類型,new 回傳的是指針,是*Type 類型的
#########【相關推薦:###Go影片教學###】 ####以上是聊聊GO初始化資料結構的方法(附程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!