go與眾不同的類型

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

      用go寫了幾個應用之後,對它的幾個類型理解得可以說也比較到位。

   

數組


    它跟C語言的數組一樣,有固定的長度,聲明之前必須很設定其長度。由於受C語言的影響,我一直把它當作指標來看待。其實,go的數組是個實值型別,當把一個數組賦值給另一個數組時,是複製了本身給另一個數組。也就是說,當把數組當作參數進行傳遞時,會拷貝整個數組,當然也就與C語言的數組指標引用相比了,效率也就大打折扣了。go數組有一點必須知道,就是它的類型是包括了長度的。一個數組包含了長度,儲存類型,實際值三個參數。[3]int與[4]int是兩個不同的數組。

     

切片

      數組的兄弟slice(切片),它是go中最常用到的類型,因為它是指標,而且沒長度的限制,可以隨時往裡面加資料。所以它的效能不僅比數組高,而且更靈活。其實slice的資料結構裡麵包含了兩個列表:一個是數組,一個是指向這個數組的指標。當聲明一個slice時,go會為數組分配一定的空間,當這個數組被填滿後,又會分配一個元素的空間。而這個指向數組的指標則會維護三個資料,指標(point)、數組空間(room)和數組中有值的個數(num)。當room=num時,就是增加一個新的元素空間。

     

map

      go的map類型跟python的字典幾乎一樣,都是key-value結構,是一個雜湊表,但它的效能跟python比起來,有很大的區別,使用時要明白資料的大小範圍,可以參考這篇文章:http://monnand.me/p/golang-map-bench/zhCN

channel

      go裡面有channel類型是go語言與眾不同的地方,也是它的特色類型,它提供了一種機制,在兩個並發執行的函數之間進行同步,並通過傳遞(與該通道元素類型相符的)值來進行通訊。事實上,可以認為 channel 是一個管道或者先進先出隊列,非常簡單且輕量。通道是參考型別,需要使用 make 分配記憶體,它經常與goroutine結合一起應用,不僅用來在兩並發函數之間通訊,也可以用來阻塞程式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.