Di mana a
slice, dan i
indeks elemen yang ingin Anda hapus:
a = append(a[:i], a[i+1:]...)
...
adalah sintaks untuk argumen variadic di Go.
Pada dasarnya, ketika mendefinisikan suatu fungsi, ia menempatkan semua argumen yang Anda masukkan ke dalam satu irisan jenis itu. Dengan melakukan itu, Anda dapat memberikan argumen sebanyak yang Anda inginkan (misalnya, fmt.Println
dapat mengambil argumen sebanyak yang Anda inginkan).
Sekarang, ketika memanggil fungsi, ...
lakukan yang sebaliknya: ia membongkar sebuah slice dan meneruskannya sebagai argumen terpisah ke fungsi variadic.
Jadi apa yang dilakukan garis ini:
a = append(a[:0], a[1:]...)
pada dasarnya:
a = append(a[:0], a[1], a[2])
Sekarang, Anda mungkin bertanya-tanya, mengapa tidak lakukan saja
a = append(a[1:]...)
Nah, definisi fungsi append
adalah
func append(slice []Type, elems ...Type) []Type
Jadi argumen pertama harus berupa irisan dari tipe yang benar, argumen kedua adalah variadic, jadi kami meneruskan irisan kosong, dan kemudian membongkar sisa slice untuk mengisi argumen.