Array, Slice 陣列

有宣告固定長度為 Array,沒宣告固定長度則為 Slice

Array 宣告方法

當 [] 內有指定長度或使用 ... 則會是 array

arr2 := [5]int{1, 2, 3}
arr3 := [...]int{1, 2, 3, 4, 5}

var scores [10]int
scores[0] = 90
scores[1] = 89

巢狀陣列

arr1 := [2][3]int{[3]int{1, 2, 3}, [3]int{4, 5, 6}}
fmt.Println(arr1) // [[1 2 3] [4 5 6]]

建立 slice

不初始長度的array及為 slice

langs := []string{"Go", "Python", "Ruby", "PHP"}

合併 slice

package main

import (
	"fmt"
)

func main() {
	low := []string{"1", "2", "3"}
	high := []string{"11", "22", "33"}
	c := append(low, high...)
	fmt.Println(c)
}

不指定型態

	var cc []interface{}

	fmt.Println(append(cc, 123, "345"))

Assign any slice to an []interface{}

slice 中取值

a[2:]  // same as a[2 : len(a)]
a[:3]  // same as a[0 : 3]
a[:]   // same as a[0 : len(a)]
If a is a pointer to an array, a[low : high] is shorthand for (*a)[low : high].

有關 slice 或 array 當成參數時

slice 如果當參數傳遞不傳 pointer 的話仍會改變原先的變數,但 array 不會改變到原先的變數。

更詳細的說明可參考:

https://stackoverflow.com/questions/39993688/are-slices-passed-by-value

Last updated