簡析Go與其他語言不同的類型
數(shù)組
它跟C語言的數(shù)組一樣,有固定的長度,聲明之前必須很設定其長度。由于受C語言的影響,我一直把它當作指針來看待。其實,Go的數(shù)組是個值類型,當把一個數(shù)組賦值給另一個數(shù)組時,是復制了本身給另一個數(shù)組。也就是說,當把數(shù)組當作參數(shù)進行傳遞時,會拷貝整個數(shù)組,當然也就與C語言的數(shù)組指針引用相比了,效率也就大打折扣了。Go數(shù)組有一點必須知道,就是它的類型是包括了長度的。一個數(shù)組包含了長度,儲存類型,實際值三個參數(shù)。[3]int與[4]int是兩個不同的數(shù)組。
切片
數(shù)組的兄弟slice(切片),它是Go中最常用到的類型,因為它是指針,而且沒長度的限制,可以隨時往里面加數(shù)據(jù)。所以它的性能不僅比數(shù)組高,而且更靈活。其實slice的數(shù)據(jù)結構里面包含了兩個列表:一個是數(shù)組,一個是指向這個數(shù)組的指針。當聲明一個slice時,Go會為數(shù)組分配一定的空間,當這個數(shù)組被填滿后,又會分配一個元素的空間。而這個指向數(shù)組的指針則會維護三個數(shù)據(jù),指針(point)、數(shù)組空間(room)和數(shù)組中有值的個數(shù)(num)。當room=num時,就是增加一個新的元素空間。
Map
Go的map類型跟python的字典幾乎一樣,都是key-value結構,是一個哈希表,但它的性能跟python比起來,有很大的區(qū)別,使用時要明白數(shù)據(jù)的大小范圍,可以參考這篇文章:http://monnand.me/p/Golang-map-bench/zhCN
channel
Go里面有channel類型是Go語言與眾不同的地方,也是它的特色類型,它提供了一種機制,在兩個并發(fā)執(zhí)行的函數(shù)之間進行同步,并通過傳遞(與該信道元素類型相符的)值來進行通信。事實上,可以認為 channel 是一個管道或者先進先出隊列,非常簡單且輕量。信道是引用類型,需要使用 make 分配內存,它經(jīng)常與Goroutine結合一起應用,不僅用來在兩并發(fā)函數(shù)之間通信,也可以用來阻塞程序。
原文鏈接:http://www.cnblogs.com/descusr/archive/2012/12/10/2812142.html
編輯推薦】