陣列及切片 Array 、Slices、Append

Go 陣列類型

陣列 Array

  • 陣列就是記憶體中連續的區塊。
  • It’s a List
  • 陣列中的值都必須要是相同的資料類型
  • 每個陣列都有值及位置[]

基本陣列

// var name[size] datatype
var a[5] int
a := [5] int { 0, 3, 2, 4, 5}

// 輸出
fmt.Println(a)    // 印出:[0,3,2,4,5]
fmt.Println(a[0])  // 印出:0

在Go語言中的原始碼(src/runtime/malloc.go)可以看到陣列的建立方式:

// newarray allocates an array of n elements of type typ.
func newarray(typ *_type, n int) unsafe.Pointer {
    if n < 0 || uintptr(n) > maxSliceCap(typ.size) {
        panic(plainError("runtime: allocation size out of range"))
    }
    return mallocgc(typ.size*uintptr(n), typ, true)
}

陣列內的元素,在起始時內容都會被設定為0,因此不需要像C語言一樣需要自己填入0或設定 \n,系統會自動將其設定好。

陣列的宣告:

var arr [5]int
var arr [5]int{1,2,3,4,5}
var arr [...]int{1,2,3,4,5}

陣列的使用:

  • 計算陣列長度: len(array)
var arr [5]int
arr[4] = 42    // 因為其他位置都是0,所以可以直接設定某個元素的值不會出錯

fmt.Println(len(arr))  // 5   
  • 刪除陣列中特定元素
index := 5;
ss = append(ss[:index], ss[index+1:]...)