Junior — Middle
Čo sa deje pri volaní metódy append a prečo vracia nový rez?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa metoda append používa na pridanie prvkov do slice. Pri volaní append sa deje nasledovné:
- Ak má slice dostatočnú kapacitu (capacity), nový prvok sa jednoducho pridá do existujúceho poľa a vráti sa slice ukazujúci na aktualizovanú časť poľa.
- Ak kapacita nie je dostatočná, vytvorí sa nové pole s navýšenou kapacitou, staré prvky sa do neho skopírujú a následne sa pridá nový prvok.
Preto append vracia nový slice, pretože:
- V prípade rozšírenia kapacity sa vráti slice ukazujúci na nové pole.
- Ak je kapacita dostatočná, vráti sa slice ukazujúci na ten istý poľ, ale s predĺženou dĺžkou.
Vždy je dôležité priradiť výsledok append späť do premennej, aby ste neztratili odkaz na aktualizovaný slice:
s := []int{1, 2, 3}
s = append(s, 4) // s teraz ukazuje na slice s prvkami [1 2 3 4]
Týmto spôsobom append vracia nový slice, pretože interné môže zmeniť základný poľ, a je potrebné aktualizovať odkaz naň.