数组
值类型
长度是固定
的,类型包括长度(如:[3]int
).切片
引用类型
长度是变化
的,类型不包括长度(如:[]int
),可以用make
函数构造/初始化.
例子
代码
package main
import "fmt"
func main() {
var arr1 = [0]int{}
var arr2 = [3]int{}
var arr3 = [3]int{0, 1, 2}
var arr4 = [...]int{3, 4, 5}
fmt.Printf("%8s %8T %v\n", "arr1", arr1, arr1)
fmt.Printf("%8s %8T %v\n", "arr2", arr2, arr2)
fmt.Printf("%8s %8T %v\n", "arr3", arr3, arr3)
fmt.Printf("%8s %8T %v\n", "arr4", arr4, arr4)
fmt.Printf("---------------------------------------\n")
var slice1 = []int{}
var slice2 = []int{0, 1, 2}
var slice3 = make([]int, 3, 6)
var slice4 = arr4[0:]
fmt.Printf("%8s %8T %v\n", "slice1", slice1, slice1)
fmt.Printf("%8s %8T %v\n", "slice2", slice2, slice2)
fmt.Printf("%8s %8T %v\n", "slice3", slice3, slice3)
fmt.Printf("%8s %8T %v\n", "slice4", slice4, slice4)
fmt.Printf("---------------------------------------\n")
var arr0 [1]int
var slice0 []int
fmt.Printf("%8s %8T %v %#v <--值类型,默认值 零值\n",
"arr0", arr0, arr0, arr0)
fmt.Printf("%8s %8T %v %#v <--引用类型,默认值 nil\n",
"slice0", slice0, slice0, slice0)
}
输出
arr1 [0]int []
arr2 [3]int [0 0 0]
arr3 [3]int [0 1 2]
arr4 [3]int [3 4 5]
---------------------------------------
slice1 []int []
slice2 []int [0 1 2]
slice3 []int [0 0 0]
slice4 []int [3 4 5]
---------------------------------------
arr0 [1]int [0] [1]int{0} <--值类型,默认值 零值
slice0 []int [] []int(nil) <--引用类型,默认值 nil