一.通过数组产生切片
定义数组后,取出数组中一个片段,这个片段就是切片类型
names := [3]string{"老张", "佳明哥", "smallming"}
s := names[0:2] //包前不包后
fmt.Printf("%T", s) //输出:[]string
fmt.Println(s) //输出:[老张 佳明哥]
切片是指针,指向数组元素地址,修改切片的内容,数组的内容会跟随变化
names := [3]string{"老张", "佳明哥", "smallming"}
s := names[0:2] //包前不包后
fmt.Printf("%p %p",s,&names[0])//输出的地址是相同的
s[0] = "Go语言"
fmt.Println(s) //输出:[Go语言 佳明哥]
fmt.Println(names) //输出:[Go语言 佳明哥 smallming]
当切片内容在增加时
- 如果增加后切片的长度没有超出数组,修改切片也是在修改数组
- 如果增加后切片的长度超出数组,会重新开辟一块空间放切片的内容
通过下面代码也正面了切片中内容存在一块连续空间(和数组一样)
names := [3]string{"老张", "佳明哥", "smallming"}
s := names[0:2] //包前不包后
fmt.Printf("%p %p\n",s,&names[0])
s[0] = "Go语言"
s=append(s,"区块链")
fmt.Println(s) //输出:[Go语言 佳明哥 区块链]
fmt.Println(names) //输出:[Go语言 佳明哥 区块链]
fmt.Printf("%p %p\n",s,&names[0])//地址相同
s=append(s,"超出了数组长度")
fmt.Println(s) //输出:[Go语言 佳明哥 区块链 超出了数组长度]
fmt.Println(names) //输出:[Go语言 佳明哥 区块链]
fmt.Printf("%p %p\n",s,&names[0])//切片地址改变
二.删除实现
- Go语言标准库中没有提供删除的函数
- 切片也可以取其中的一段形成子切片,利用这个特性可以实现删除效果
num := []int {0,1,2,3,4,5,6}
//要删除脚标为n的元素
n:= 2
num1 :=num[0:n]
num1= append(num1,num[n+1:]...)
fmt.Println(num1)