go 数组和切片

  • 数组 值类型长度是固定的,类型包括长度(如: [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

猜你喜欢

转载自blog.csdn.net/u011714033/article/details/89716357