Sobes.tech
Junior — Middle

Proč je důležité brát v úvahu kapacitu slices při práci s poli v Go?

sobes.tech AI

Odpověď od AI

V Go jsou řezové (slices) dynamické struktury, které obsahují ukazatel na pole, délku a kapacitu. Kapacita řezu určuje, kolik prvků může obsahovat bez alokace nové paměti.

Je důležité brát v úvahu kapacitu, protože:

  • Při přidávání prvků pomocí append, pokud délka řezu přesáhne kapacitu, je alokováno nové pole s větší kapacitou a data jsou zkopírována, což ovlivňuje výkon.
  • Znalost kapacity umožňuje efektivně spravovat paměť a vyhýbat se zbytečným alokacím.

Příklad:

s := make([]int, 0, 5) // délka 0, kapacita 5
fmt.Println(len(s), cap(s)) // 0 5

s = append(s, 1, 2, 3, 4, 5)
fmt.Println(len(s), cap(s)) // 5 5

s = append(s, 6) // kapacita překročena, alokuje se nové pole
fmt.Println(len(s), cap(s)) // 6 10 (přibližně)

Kontrolou kapacity lze optimalizovat práci s řezy.