Sobes.tech
Junior — Middle

Ce se întâmplă atunci când se apelează metoda append și de ce returnează o felie nouă?

sobes.tech AI

Răspuns de la AI

În Go, metoda append este utilizată pentru a adăuga elemente la un slice. Când se apelează append, se întâmplă următoarele:

  1. Dacă capacitatea (capacity) slice-ului este suficientă, elementul nou este pur și simplu adăugat la array-ul existent, iar un slice care indică partea actualizată a array-ului este returnat.
  2. Dacă capacitatea nu este suficientă, se creează un nou array cu o capacitate mărită, elementele vechi sunt copiate în el, apoi se adaugă elementul nou.

De aceea, append returnează un nou slice pentru că:

  • În cazul extinderii capacității, se returnează un slice care indică noul array.
  • În cazul în care capacitatea este suficientă, se returnează un slice care indică același array, dar cu o lungime crescută.

Este important să atribui întotdeauna rezultatul append înapoi variabilei, pentru a nu pierde referința la slice-ul actualizat:

s := []int{1, 2, 3}
s = append(s, 4)  // s acum indică un slice cu elementele [1 2 3 4]

Astfel, append returnează un nou slice deoarece intern poate schimba array-ul de bază, și trebuie actualizată referința la acesta.