【Golang】删除一个slice中的一个或多个元素,以及slice共享问题

其实这都是一些基础问题,但是自己总是忘记,在这里做个记录。

  1. 删除slice中的一个或多个元素

s = append(s[:i], s[i+1:]...)

我第一次看到这种结构时感觉很迷茫,其实可以分开来看。首先s[:i]相当于slice截取,也就是说s[:i]本身就是一个slice。然后s[i+1:]...相当于变长参数。append()函数内部,通过循环append()递归操作即可。s本身的长度会发生改变,因为append()参数的是一个新的slice,然后赋值给s。但是s的容量不会变化。

  1. slice共享问题
  • 首先,slice之间赋值,是共享了内存地址的,如果修改其中一个,另外一个也会修改。就像函数传递slice参数的效果。
  • 如果两个slice之间共享,如果其中一个slice的长度发生了改变,另一个slice的长度是不会发生改变的,改变的是内存中的数据。
a1 := []int{1, 2, 3, 4, 5}
a2 := a1

a1 = append(a1[:1], a1[2:]...)

fmt.Println(a2)
fmt.Println(a1)

//output:
[1 3 4 5 5]
[1 3 4 5]

你可能感兴趣的:(【Golang】删除一个slice中的一个或多个元素,以及slice共享问题)