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