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.