Go map中乙個很重要的特性

2021-09-06 23:05:10 字數 1130 閱讀 2906

先看一段**:

func main() 

fmt.println("-----------------")

mm := make(map[int]string)

mm[1] = "a"

mm[2] = "b"

mm[3] = "c"

for k, v := range mm

fmt.println("-----------------")

mmm := make(map[int]string)

mmm[1] = "a"

mmm[2] = "b"

mmm[3] = "c"

for k, v := range mmm

}

我起初以為三次的輸出中,元素的輸出順序都是相同的,可惜,得到的結果如下:

[cobbliu@*** map]$ go run range.go

1 a2 b

3 c-----------------

1 a2 b

3 c-----------------

3 c1 a

2 b

對,go中map的乙個很重要的特性就是:當您多次通過range迴圈來迭代訪問map中元素時,儘管您訪問的是同乙個map,但是訪問元素的順序在前後兩次range中是不會完全相同的。當然也不是完全隨機的。從go1開始,go在range遍歷map中元素的時候,從隨機的乙個位置開始迭代

為什麼要這樣做?因為go的設計者們認為會有一些程式設計師對同乙個map中元素的遍歷順序假設為相同,在這個假設的前提下,會做一些事情(今天的我就是這樣,在這個假設的前提下,碼了很多字母),他們認為不應該對乙個map中的元素的遍歷順序有假設,所以從go1.0開始,隨機化了range map的起始位置。

儘管掉坑里了,但是卻使我對go又多了一層好感,go設計者在每個細節上都深思熟慮,他們盡量保持了語言的嚴謹性,創造了完整的輔助工具,對於一些模稜兩可的特性,強加了約束,只有這樣,才會防止在應用層**出現詭異的bug,讓go語言使用者們能放心使用它。

儘管現在的go少了泛型,但是這個特性真的有那麼必要麼?go說,至少目前,沒有那麼必要!

乙個很重要的提醒

大家都知道,還有不到半個月的時間,2018年就真的過去了。直達真相現場,為你揭開謎底。說實話,去年回來後,真的一直特別的忙,忙著找工作,忙著找裝修,談合同,看材料,忙著看裝修 這裡給後在需要裝修的夥伴提下,家裝真的要注意,如果你不太專業,最好先找個熟悉的朋友請教請教,這裡面水太深,像材料的選擇 施工...

我發現失去乙個很重要的東西

我發現失去乙個很重要的東西 那一年我想要認識你的一種勇氣 這是趙傳 勇敢一點 的歌詞,有一天我發現自己也失去了 乙個很重要的東西 並且不止乙個,讓我覺得生命空虛了很多,想它們找回來。激情,那種衝動的激情,現在偶爾還有,可是顧慮很多,多思轉多私 古人誠不我欺 愛好,原來能讓我興趣盎然的愛好,旅遊 籃球...

作為乙個MYSQL新手,筆記很重要。

第乙個 安裝mysql的步驟和方法 第二個 mysql的一些命令 第一招 mysql服務的啟動和停止 net stop mysql net start mysql 第二招 登陸mysql 語法如下 mysql u使用者名稱 p使用者密碼 鍵入命令mysql uroot p,回車後提示你輸入密碼,輸入...