Sobes.tech
Junior — Middle

Co se stane při volání metody append a proč vrací nový řez?

sobes.tech AI

Odpověď od AI

V jazyce Go se metoda append používá k přidání prvků do slice. Při volání append se děje následující:

  1. Pokud má slice dostatečnou kapacitu (capacity), nový prvek se jednoduše přidá do existujícího pole a vrátí se slice ukazující na aktualizovanou část pole.
  2. Pokud kapacita nestačí, vytvoří se nové pole s navýšenou kapacitou, staré prvky se do něj zkopírují a poté se přidá nový prvek.

Proto append vrací nový slice, protože:

  • V případě rozšíření kapacity se vrací slice ukazující na nové pole.
  • Pokud je kapacita dostatečná, vrací se slice ukazující na stejnou pole, ale s prodlouženou délkou.

Je důležité vždy přiřadit výsledek append zpět do proměnné, aby nedošlo ke ztrátě odkazu na aktualizovaný slice:

s := []int{1, 2, 3}
s = append(s, 4)  // s nyní ukazuje na slice s prvky [1 2 3 4]

Tímto způsobem append vrací nový slice, protože interně může změnit základní pole, a je třeba aktualizovat odkaz na něj.