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

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