樂呵樂呵得了 golang入坑系列

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

開場就有料,今天返回去看了看以前的文章,輕鬆指數有點下降趨勢。一琢磨,這不是我的風格呀。一反思,合著是這段時間,腦子裡雜七雜八的雜事有點多,事情一多,就忘了快樂。古話說得好:愁也一天,樂也一天,只要還能過得去,完事不鑽牛角尖。這話真應該變成座右銘,最次成口頭禪也成。還有句古話是這麼說:哭也一天,笑也一天,只要不做虧心事,就是活神仙。兩句正好湊合對聯,過年貼上,保准比那些個風調雨順,國泰民安之類的對子好,還實用,您說是不是。

煩自心中來,樂自腦中生。萬事都有其兩面性,看你怎麼想。越想越好,可能壞事能變好。越想越壞,事還沒變壞,自己個先把自己個嚇死了。所以古人才創造了個塞翁失馬焉知非福的寓言小故事,魯迅先生也抽象出了阿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 放這裡,會收到很多妹子的郵件。 不管別人信不信,反正我信了。:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.