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{}
[]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
Was this helpful?