创建数组
arrs := [5]int{1,2,3,4}
创建切片
arrs := []int{1,2,3,4}
总结
指定 [len]type{ v0,v1,v2,v3 }
创建的 就是数组
不指定len []int{ v0,v1,v2 }
创建的就是切片
具体的区别就是,数组 在函数调用时 是按照 值拷贝进行传递的
而切片 则是 按照 引用方式 进行 传递的
体验 数组 和 切片的 差异
package main import ( "fmt" ) func change(vals interface{}) { if dArray, ok := vals.([5]int); ok == true { dArray[0] += 10 } else if dSlice, ok := vals.([]int); ok == true { dSlice[0] += 10 } } func changeVal() { a := [5]int{1, 1, 1, 1, 1} fmt.Println(" before cahnge val ", a) change(a) fmt.Println(" after cahnge val ", a) } func changeRef() { a := []int{1, 1, 1, 1, 1} fmt.Println(" before cahnge val ", a) change(a) fmt.Println(" after cahnge val ", a) } func main() { changeVal() changeRef() return }
output
go run .\compareValRef.go array before cahnge val [1 1 1 1 1] array after cahnge val [1 1 1 1 1] slice before cahnge val [1 1 1 1 1] slice after cahnge val [11 1 1 1 1]