数组长度固定 长度是数组的类型一部分 所以这样有很多局限性 例如 1. 传递参数必须要固定的数组 2. 数组满了不能添加元素
1.切片是一个引用类型
2. 切片唯一合法的比较操作是和ni
3.切片的本质就是对底层数组的封装
4.一个nil
值的切片的长度和容量都是0
5.长度和容量都是0的切片一定是nil
6.是nil
值的切片表示 没有底层数组
package main import ( "fmt" "reflect" "sort" ) //数组 func slice() { var name[3] int //声明 fmt.Println(reflect.TypeOf(name)) var name2 [] int //声明切片 fmt.Println(reflect.TypeOf(name2)) //切片表达式从 【字符串】、【数组】、【指向数组】或【切片的指针】构造子字符串或切片 //1.指定low和height两个索引界限的简单形式 a_slice := [5]int{1, 2, 3, 4, 5} s:=a_slice[2:4] fmt.Println(s) //2.除了第一种 还 指定容量的完整的形式。 //使用make()函数构造切片 a:=make([]int,2,5) //make([]T, size, cap) fmt.Println(a) s3 := make([]int, 0,0) //他有底层数组 fmt.Println(s3 ==nil)//false var s4 []int //他没有有底层数组 fmt.Println(s4 ==nil) //true //切片的赋值拷贝 var shuzu =[5]int {1, 2, 3, 4, 5} qiep:=shuzu[1:4] qiep2:=qiep qiep[0]=5 //修改了切片第0个索引 相当于把2改成5 fmt.Println(shuzu) //数组发生变化 fmt.Println(qiep) //切片1发生了变化 fmt.Println(qiep2)//切片2也发生了变化 //添加元素 var s2 [] int s2=append(s2,1) fmt.Println(s2) //添加一个元素给s2 //删除元素 var delname [] int delname=append(delname,11,3,4,5,9) fmt.Println(delname) delname=append(delname[:2],delname[3:]...) fmt.Println(delname) sort.Ints(delname) //排序delname fmt.Println(delname) } func main(){ slice() }