Junior — Middle
Co się dzieje podczas wywołania metody append i dlaczego zwraca nowy zakres?
sobes.tech AI
Odpowiedź od AI
W języku Go metoda append służy do dodawania elementów do slices. Podczas wywołania append dzieje się następująco:
- Jeśli pojemność (capacity) slices jest wystarczająca, nowy element jest po prostu dodawany do istniejącej tablicy, a zwracany jest slice wskazujący na zaktualizowaną część tablicy.
- Jeśli pojemność jest niewystarczająca, tworzona jest nowa tablica z powiększoną pojemnością, stare elementy są kopiowane do niej, a następnie dodawany jest nowy element.
Dlatego append zwraca nowy slice, ponieważ:
- W przypadku rozszerzenia pojemności, zwracany jest slice wskazujący na nową tablicę.
- Gdy pojemność jest wystarczająca, zwracany jest slice wskazujący na ten sam array, ale z wydłużoną długością.
Zawsze ważne jest, aby przypisać wynik append z powrotem do zmiennej, aby nie stracić odniesienia do zaktualizowanego slice:
s := []int{1, 2, 3}
s = append(s, 4) // s teraz wskazuje na slice z elementami [1 2 3 4]
W ten sposób append zwraca nowy slice, ponieważ wewnętrznie może zmienić bazową tablicę, i trzeba zaktualizować odwołanie do niej.