Де 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
Отже, перший аргумент повинен бути фрагментом правильного типу, другий аргумент - варіативним, тому ми переходимо в порожній фрагмент, а потім розпаковуємо решту фрагмента для заповнення аргументів.