由於go語言中的陣列是乙個固定的長度的聚合型別,也無法靈活地改變陣列中的值。因此,go語言又引入的另一種聚合型別:slices型別。
slices型別一種靈活又強大地「陣列」,為什麼go語言要一下子引入兩種容易讓人混亂的概念呢?這是我在學習中的一點困惑。
slices到底是什麼呢?是一種由三部分(指標、長度和容量 )構成的一種輕量級的資料結構,提供了訪問陣列子串行(或者全部)元素的功能。
本質上,多個不同slices可能共享同乙個陣列的底層資料。slice並不是乙個純粹的引用型別,它實際上是乙個類似下面結構體的聚合型別:
type intslice struct
陣列可以進行相等比較,而slices則不能進行相等比較。不過標準庫提供了高度優化的bytes.equal函式來判斷兩個位元組型slice是否相等(byte),但是對於其他型別的slice,我們必須自己展開每個元素進行比較。
如果你需要測試乙個slice是否是空的,使用len(s) == 0來判斷,而不應該用s == nil來判斷。除了和nil相等比較外,乙個nil值的slice的行為和其它任意0產長度的slice一樣。
因此,可以這樣理解,slices是陣列的view.
Go語言之GO 語言常量
相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...
Go語言之併發程式設計(一)
輕量級執行緒 goroutine 雖然,執行緒池為邏輯編寫者提供了執行緒分配的抽象機制。但是,如果面對隨時隨地可能發生的併發和執行緒處理需求,執行緒池就不是非常直觀和方便了。能否有一種機制 使用者分配足夠多的任務,系統能自動幫助使用者把任務分配到cpu上,讓這些任務盡量併發運作。這種機制在go語言中...
Go語言之Go語言網路程式設計
go語言的 net 包中有乙個 tcpconn 型別,可以用來建立 tcp 客戶端和 tcp 伺服器端間的通訊通道,tcpconn 型別裡有兩個主要的函式 func c tcpconn write b byte n int,err os.error func c tcpconn read b byt...