go語言學習備忘(切片)

數組:

在 Go 語言裏,數組是一個長度固定的數據類型,用於存儲一段具有相同的類型的元素的連續塊。

數組是一種非常有用的數據結構,因爲其佔用的內存是連續分配的。由於內存連續,CPU能把正在使用的數據緩存更久的時間。而且內存連續很容易計算索引,可以快速迭代數組裏的所有元素。數組的類型信息可以提供每次訪問一個元素時需要在內存中移動的距離。既然數組的每個元素類型相同,又是連續分配,就可以以固定速度索引數組中的任意數據,速度非常快。

使用數組字面量聲明數組:

// 聲明一個包含 5 個元素的整型數組
// 用具體值初始化每個元素
array := [5]int{10, 20, 30, 40, 50}

在函數間傳遞數組要使用數組的指針,因爲函數傳遞會複製參數。

 

切片:

 

切片是一個很小的對象,對底層數組進行了抽象,並提供相關的操作方法。切片有 3 個字段的數據結構,這些數據結構包含 Go 語言需要操作底層數組的元數據。這 3 個字段分別是指向底層數組的指針、切片訪問的元素的個數(即長度)和切片允許增長
到的元素個數(即容量)。

使用切片字面量來聲明切片:

// 創建字符串切片
// 其長度和容量都是 5 個元素
slice := []string{"Red", "Blue", "Green", "Yellow", "Pink"}

 

計算長度和容量:

對底層數組容量是 k 的切片 slice[i:j]來說
長度: j - i 
容量: k - i 

對於 slice[i:j:k] 或 [2:3:4]來說:

長度: j – i 
容量: k – i 

 

// 將兩個切片追加在一起,並顯示結果
fmt.Printf("%v\n", append(s1, s2...))

 

迭代切片:

for 或者 range,需要強調的是,range 創建了每個元素的副本,而不是直接返回對該元素的引用

 

切片增長:

在底層數組裏還有額外的容量可用,append 操作將可用的元素合併到切片的長度,並對其進行賦值。
如果切片的底層數組沒有足夠的可用容量,append 函數會創建一個新的底層數組,將被引用的現有的值複製到新數組裏,再追加新的值

使用切片時,最好設置切片長度和容量一致,這樣調用append的時候,會創建一個新的底層數組而不會修改原來的底層數組。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章