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