這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
開場就有料,今天返回去看了看以前的文章,輕鬆指數有點下降趨勢。一琢磨,這不是我的風格呀。一反思,合著是這段時間,腦子裡雜七雜八的雜事有點多,事情一多,就忘了快樂。古話說得好:愁也一天,樂也一天,只要還能過得去,完事不鑽牛角尖。這話真應該變成座右銘,最次成口頭禪也成。還有句古話是這麼說:哭也一天,笑也一天,只要不做虧心事,就是活神仙。兩句正好湊合對聯,過年貼上,保准比那些個風調雨順,國泰民安之類的對子好,還實用,您說是不是。
煩自心中來,樂自腦中生。萬事都有其兩面性,看你怎麼想。越想越好,可能壞事能變好。越想越壞,事還沒變壞,自己個先把自己個嚇死了。所以古人才創造了個塞翁失馬焉知非福的寓言小故事,魯迅先生也抽象出了阿Q這麼個豐滿的人物。事無定論,運無長勢,誰知道下一秒會變成什麼樣呢。所以嘛,樂呵樂呵得了。別老掙著麵粉的錢,操著白粉的心了。
上節聊了聊切片的基本使用規則。 講真話,單靠我那一點點文字,沒法把切片講的透透徹徹,明明白白。如果真要講到那個份,估計沒等看完,你就該睡著了。入門嘛,夠用就行。等入完門,真要用到那麼高深規則的時候,自己再去查都來得及。所以甭噴講的淺,講深才不是我的風格呢。
這節,我們來接著切片(數組)的感覺往下聊如何遍曆迭代。我剛接觸Golang的時候,經常需要迭代數組裡面的元素,最簡單的方式是寫個下標,然後不停的迴圈累加,取下標的值。這是到哪都通用的方式,但如果遇到map了呢?就不適用了。所以Golang內建了range操作來迭代集合資料結構。
先看看如何迭代數組或者切片:
numbers := []int{0,1,2,3,4,5,6,7,8} for i:= range numbers { fmt.Println("Slice item",i,"is",numbers[i]) }
range後面緊跟切片變數,而且前面肯定是for。此時i就是數組下標,迴圈一次,i會自增加一,直到numbers迴圈完畢。上面剛說除了可以迭代切片,還可以除了map。因為map存在key和value,所以range就有兩種寫法:
countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo"} for country := range countryCapitalMap { fmt.Println("Capital of",country,"is",countryCapitalMap[country]) } for country,capital := range countryCapitalMap { fmt.Println("Capital of",country,"is",capital) }
此時,range可以依次取出key,也可以同時取出key和value。此時需要注意,key的不是由ragne來保證,而是由map來決定的。range操作只不過是挨個依次取出資料集合中的元素而已。
本來range操作是需要放到上節中說的,但臨近中午都要吃飯嘛,所以犯懶沒寫。這節補上,反正range操作僅此而已。但既然提到了map,那就開聊map吧。平時我也是這樣,隨便來個話頭都能繼續聊下去,幾個朋友瞎扯淡,不就是沒事找事,沒話找話嘛。事先打草稿,一準是事先預謀好的(這裡就要由衷的表揚一下各個公司的CXO,隨便一人洋洋洒洒就能脫口秀好幾個小時,要想融到資,必須打小就要學會有條理的瞎扯淡)。所以想哪就寫哪,下面聊map。
Map基本是各種程式設計語言中必備的一種資料類型,所以Golang也不能拉下這種重要的東西。Golang不比Java,map是介面,還實現了hashmap,linkedhashmap 還有treemap. Golang當中沒有那麼多的實現,只有hashmap。非要在說一個map,那就是bitmaps(應該是沒有其它map了,查看官方文檔和查看golang源碼也沒有找到其它map。如果你發現還有其它類型的map,請告訴我,應該是沒了)。
bitmap和hashmap都不是一路人,所以不提也罷。因此下面的map指的就是hashmap。先說怎麼建立一個map,這裡要用到make函數了,在創造切片的時候用過它,在golang當中建立各種資料類型,基本都會用到它。
map_variable := make(map[key_data_type]value_data_type)
比如,我們創造一個map,key是string,value是int。就是;
myMap := make(map[string]int)
不需要指定大小,因為map會自動擴容。這樣就可以下面就可以使用myMap了。 如果喜歡文縐縐的風格,還可以這麼做:
var myMap map[string]intmyMap = make(map[string]int)
效果一個樣,但程式碼數變兩行(V2EX還有人諷刺說,如果我的文章按行算就發財了。 對不起,一來不收費。二來哪家公司按行算?典型的說話不過大腦,諷刺找不到穴位)。 還是那句話,選擇哪個都行,高興就好。
結合上面的range操作,把map也糅合進去:
package mainimport "fmt"func main() { var countryCapitalMap map[string]string countryCapitalMap = make(map[string]string) countryCapitalMap["France"] = "Paris" countryCapitalMap["Italy"] = "Rome" countryCapitalMap["Japan"] = "Tokyo" countryCapitalMap["India"] = "New Delhi" for country := range countryCapitalMap { fmt.Println("Capital of",country,"is",countryCapitalMap[country]) }}
在日常使用過程當中,有兩個操作經常出現,一判斷指定Key是否存在。二刪除指定Key。
先來回答第一個問題,如果判斷指定Key是否存在:
capital, ok := countryCapitalMap["United States"] if(ok){ fmt.Println("Capital of United States is", capital) } else { fmt.Println("Capital of United States is not present") }
ok是個bool值,用來表示指定的Key是否存在,簡單明了。然後回答第二個問題,如何刪除?
delete(countryCapitalMap,"France")
恩,就用delete函數,簡單粗暴。對於Golang來說,個人感覺應該是入門難度相對很低的一門語言了,除了文法稍微要適應一下,基本沒有太大的學習成本。以前的知識和儲備都不需要扔掉,換個殼子就能用。
今天周五(12.1)了,也不知道你能看下去多少,反正我是寫不了多少了。 所以倆手指繞繞腦袋,休息一下,休息一小下兒吧。
據說把郵箱地址 ztao8607@gmail.com 放這裡,會收到很多妹子的郵件。 不管別人信不信,反正我信了。:)