slice & array 差別
https://blog.golang.org/go-slices-usage-and-internals
Array
1 |
|
Slice
1 |
|
Glance : Difference between both
- 兩者在宣告方式不同
- 兩者 type 不同
- 兩者 kind 不同
- 兩者在宣告後, 不設定 content, 印出內容
- 兩者在新增/修改值上不同
- 兩者 func 中,使用原理方式不同
兩者在宣告方式不同 :
- array : Go’s arrays are values.
var arrObject [4]int
arrObject := [4]int{0, 1, 2, 3}
arrObject := [...]int{0, 1, 2, 3}
- slice : 用 make 建立
var sliceObject []int
sliceObject := []int{}
sliceObject := []int{1,2,3,4}
兩者 type 不同
- array :
fmt.Println(reflect.TypeOf(arrObject))
, 顯示 [4]int - slice :
fmt.Println(reflect.TypeOf(sliceObject))
, 顯示 []int
兩者 kind 不同 :
- array :
fmt.Println(reflect.TypeOf(arrObject).Kind())
, 顯示 array - slice :
fmt.Println(reflect.TypeOf(sliceObject).Kind())
, 顯示 slice
兩者在宣告後, 不設定 content, 印出內容
- array : An array’s size is fixed
- slice : A slice type has no specified length.
兩者在新增/修改值上不同
- array
- arr 長度固定, 無法新增
- 新增、修改 :
arrObject[0] = 999
- slice
- 新增 :
sliceObject = append(sliceObject, 1,2,3,4)
- 修改 :
sliceObject[0] = 999
- 新增 :
兩者 func 中,使用原理方式不同
範例中用到的 func, 需要注意 pointer
- array 在 func 中, 是用 copy 的方式. 故最好用 pointer 的方式在傳遞 array
- slice 本身就是一個 pointer, 故可以在 func 中, 看到 address 相同
The same
兩者在切割方式上相同 :
arr[:2]
=sliceObject[:2]
顯示長度上
- array :
fmt.Println(len(arrayObject))
, 顯示 4 - slice :
fmt.Println(len(sliceObject))
顯示 0