golang 之 map 新玩法

2021-08-26 15:22:01 字數 2060 閱讀 9963

筆者接觸 golang 也有兩年的時間了,最常用的以string為key map 型別無非就是 map[string] 基礎型別(int、string、float等)、map[string]inte***ce{}、map[string]struct 這幾類,說來慚愧,以前抽象資料結構,在用多維 map 的時候都是將第二維的 map 用乙個單獨的 struct 包裝之後再使用。

以前都是這麼用的:

//key 代表姓名

//value 代表年齡

type person struct

//key 代表班級

//value 代表該班級的學生

class := map[string]person

了解新玩法了之後,感覺開啟了一扇大門:

//第一維 map 的 key 表示班級

//第二維 map 代表學生,key 為姓名, value 為年齡

class := map[string]map[string]int

按照上面的例子,抽象結構之後,很可能會這麼寫**

package main

import (

"fmt"

)func main()

你以為這麼寫真的對嗎?執行一下看看結果:

panic: assignment to entry in nil map

goroutine 1 [running]:

main.main()

/tmp/sandbox913968657/main.go:9 +0xa0

果然不能這麼輕易就成功,報錯提示正在給乙個 nil map 賦值,可是 cm 這個不是已經初始化了嗎?別忘了,編譯器可不知道 cm 這個 map 是二維的 map ,所以在使用的時候就需要你手動的賦值了

笨笨的姿勢

最容易想到的,往往就是那個最繁瑣的姿勢,所以以後寫**的時候要多想想

package main

import (

"fmt"

)func main()

執行結果:

info map[三年一班:map[王小明:10]]
更優美的姿勢

作為一名追求完美軟體開發人員,下面這種應該是你最合適的選擇:

package main

import (

"fmt"

)func main()

fmt.println("info", cm)

}

執行結果:

info map[三年一班:map[王小明:10]]
很多時候,寫**之前多想想就會有很多的新收穫,你以為文章到這裡就結束了?no,下面我要分享我的新收穫了。

golang 中的引用型別有 map、channel、slice(int、string、float等其它的型別為值型別)引用型別就是在訪問過程中修改儲存的值,這種修改在後續的操作中是可見的。那麼問題來了:

其實正確答案我也不知道,但個人認為這個跟你自己的要儲存的資料有關,如果修改需要對後續的操作可見,就用引用型別;如果對占用的記憶體有限制,也用引用型別

注意: 暫時只想到這兩個,後續持續補充好了��

秉承舉一反三的思維,我猜你肯定也是這麼寫的:

package main

import (

"fmt"

)func main()

fmt.println("first print info", cm)

//增加乙個元素試試

fmt.println("second print info", cm)

}

列印結果:

first print info map[三年一班:[王小明 李曉紅]]

second print info map[三年一班:[王小明 李曉紅 夏天]]

遊戲新玩法之戀人玩法

從04年開始到現在,陸陸續續也玩過不少遊戲了,能讓我留存超過乙個月的遊戲屈指可數。而今天在地鐵上發呆的時候,繼續對著當今的遊戲業吐槽。而就在吐槽的時候,我忽然迸發出了一種戀人玩法的想法 1.戀人玩法是和當前普遍玩法相對應的。普遍玩法是我們建立乙個帳號,然後建立乙個角色,然後乙個人去公升級去副本去組隊...

golang學習之map排序方法

實際操作中遇到map無法排序問題,借鑑前輩的方案 親測可行 注意 golang中的map預設是無序的,每次遍歷,得到的輸出結果可能不一樣。golang中的map排序 將map的key放到切片中 對切片排序 遍歷切片,然後來按key來輸出map的值。package main import sort f...

Golang通脈之map詳情

目錄 go語言中提供的對映關係容器為map,其內部使用雜湊表 hash 實現。map是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key類似於索引,指向資料的值 map 是一種集合,所以可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,無法決定它的返回順序,這是...