一:閒話雜談:
之前在學數組,結果意外的把[...]裏面的...省略了,還自以爲定義了一個數組。結果自己大錯特錯。前面不加...是表示切片。
所以現在要來了解一下兩者的規則:
golang中數組和切片的區別:
- 切片時指針類型,數組是值類型
- 數組的長度是固定的,而切片不是(切片是動態的數組)ps:數組前面的[]裏面不寫數字,寫成[...]可以動態推斷長度的
- 切片比數組多一個屬性:容量(cap)。數組和切片都通樣有個len(),元素個數
- 切片的底層是數組
另外,根據第一點來看,切片是指針類型,那麼在裏面進行 操作都屬於引用傳遞,會動態改變其中的值
數組呢,是值傳遞,按理來說並沒有一直改變其中某個元素的值。
二:切片的幾個用法:
2.1 類似於python裏面,可以對一個可迭代對象用中括號進行取區間
numbers := []int{0,1,2,3,4,5,6,7,8}
fmt.Println("numbers[1:4] ==", numbers[1:4])
切片初始化
s :=[] int {1,2,3 }
直接初始化切片,[]表示是切片類型,{1,2,3}初始化值依次是1,2,3.其cap=len=3
s := arr[:]
初始化切片s,是數組arr的引用
s := arr[startIndex:endIndex]
將arr中從下標startIndex到endIndex-1 下的元素創建爲一個新的切片
s := arr[startIndex:]
默認 endIndex 時將表示一直到arr的最後一個元素
s := arr[:endIndex]
默認 startIndex 時將表示從arr的第一個元素開始
s1 := s[startIndex:endIndex]
通過切片s初始化切片s1
s :=make([]int,len,cap)
以上粘貼自菜鳥驛站,哦不,菜鳥教程~。都很好理解,和python的用法基本一樣的。
2.2 幾個函數,len(),cap(),append(),copy()
由於python萬物皆是對象,比如數組,直接就能調用.append方法,同js一樣
a = []
a.append(1)
golang的話 寫法就跟易語言一樣的了,append函數等同於易語言的加入成員(數組變量,成員變量)
var numbers []int
numbers = append(numbers, 0)
對於copy方法:
numbers1 := make([]int, len(numbers), (cap(numbers))*2)
copy(numbers1,numbers)
第一個參數是待複製的切片,第二個是想要被複制的切片
至於len()方法和cap()方法,用於切片取長度和切片容量,其中容量是切片獨有的,len()是通用的,這些無需多說了 吧。都會。