Где a
находится срез, а i
это индекс элемента, который вы хотите удалить:
a = append(a[:i], a[i+1:]...)
...
- синтаксис для вариативных аргументов в Go.
По сути, при определении функции она помещает все аргументы, которые вы передаете, в один фрагмент этого типа. Поступая так, вы можете передавать столько аргументов, сколько хотите (например, fmt.Println
можете принимать столько аргументов, сколько хотите).
Теперь при вызове функции ...
происходит обратное: он распаковывает срез и передает их как отдельные аргументы в вариационную функцию.
Итак, что делает эта строка:
a = append(a[:0], a[1:]...)
по сути:
a = append(a[:0], a[1], a[2])
Теперь вам может быть интересно, почему бы просто не сделать
a = append(a[1:]...)
Ну, функция определения append
является
func append(slice []Type, elems ...Type) []Type
Таким образом, первый аргумент должен быть срезом правильного типа, второй аргумент - вариативным, поэтому мы передаем пустой срез, а затем распаковываем остальную часть среза, чтобы заполнить аргументы.