func main() {
a := []string{"Hello1", "Hello2", "Hello3"}
fmt.Println(a)
// [Hello1 Hello2 Hello3]
a = append(a[:0], a[1:]...)
fmt.Println(a)
// [Hello2 Hello3]
}
这个带有附加功能的删除技巧是如何工作的?
它似乎在第一个元素(空数组)之前抓住了一切
然后在第一个元素(位置零)之后附加所有内容
…(点点点)的作用是什么?
原文由 Jorge Olivero 发布,翻译遵循 CC BY-SA 4.0 许可协议
其中
a
是切片,而i
是要删除的元素的索引:...
是 Go 中可变参数的语法。基本上,当 定义 一个函数时,它会将您传递的所有参数放入该类型的一个切片中。通过这样做,您可以根据需要传递任意数量的参数(例如,
fmt.Println
可以采用任意数量的参数)。现在,当 调用 一个函数时,
...
做相反的事情:它解包一个切片并将它们作为单独的参数传递给可变参数函数。那么这条线做了什么:
本质上是:
现在,你可能想知道,为什么不直接做
那么,
append
的函数定义是所以第一个参数必须是正确类型的切片,第二个参数是可变参数,所以我们传入一个空切片,然后解压切片的其余部分以填充参数。