一句话总结:切片的底层是数组,可以理解为切片是动态数组,注意两者初始化和函数参数的区别。
1、初始化:
数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变
数组: a := [...]int{1,2,3} 或 var a = [...]int{1, 2, 3}
a := [3]int{1,2,3} 或 var a = [3]int {1, 2, 3}
切片: a:= []int{1,2,3} 或 var a = []int{1,2,3}
a := make([]int, 5)
a := make([]int, 5, 10)
var s []int = []int{1, 2, 3, 4}
//var a [...]int = [...]int{1, 2, 3} //error
切片不需要指定大小
值得注意的是: string 类型 的底层是数组, 是数组就可以用来切片操作
如
//s :="hello world"
var s string = "hello world"
s1 := s[0:len(s)]
fmt.Println(s1)
输出的结果:hello world
2、函数传递:
数组需要明确指定大小,切片不需要。数组是值传递,切片是地址传递。