学习go语言,常用的数据结构就是切片,底层是维护一个数组,常用的append对切片进行增删操作。今天分享的样例就是在进行切片删除操作时,对切片本质以及对append会有一个综合理解的场景,我把这个场景简化成一个代码样例,算是做个总结
func main(){
s1 := []int{1,2,3,4,5,6}
t1(s1)
fmt.Println(s1)
}
func t1(s []int){
//循环删除切片前三个数
for i:=0 ; i<6 ; i++ {
s = append(s[:0],s[1:]...)
fmt.Println(s)
}
}
输出
[2 3 4 5 6]
[3 4 5 6]
[4 5 6]
[5 6]
[6]
[]
[6 6 6 6 6 6]
“多个slice之间可以共享底层的数据,并且引用的数组部分区间可能重叠” (<<Go语言圣经>>)输入的slice和输出的slice共享一个底层数组。这可以避免分配另一个数组,不过原来的数据将可能会被覆盖,如果需要返回s则直接return回去并赋值给s1;如果不想方法里因为共享 底层数据,而修改了自己的值,则在传入是就拷贝一个新切片传进去。