Middle
Co se stane, když přidáme příliš mnoho prvků do slice uvnitř funkce?
sobes.tech AI
Odpověď od AI
V jazyce Go je slice struktura, která obsahuje ukazatel na pole, délku a kapacitu. Pokud přidáte do slice příliš mnoho prvků, překročíte jeho aktuální kapacitu, Go automaticky alokuje nové pole větší velikosti a zkopíruje do něj data.
To znamená, že při přidávání prvků se může slice přeuspořádat, což přináší dodatečné náklady na čas a paměť. Pokud přidáváte prvky do slice uvnitř funkce bez vrácení nového slice, změny nemusí být zachovány, protože slice je předáván hodnotou (struktura je kopírována, ale data nikoliv).
Příklad:
func appendElements(s []int) {
for i := 0; i < 1000; i++ {
s = append(s, i) // při překročení kapacity se vytvoří nový slice
}
}
// Aby se změny zachovaly, je třeba vrátit slice:
func appendElementsCorrect(s []int) []int {
for i := 0; i < 1000; i++ {
s = append(s, i)
}
return s
}
Při přidávání velkého množství prvků je důležité vzít v úvahu přerozdělení paměti a správně pracovat s vrácenou hodnotou slice.