Sobes.tech
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:

  1. 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.
  2. 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.