Middle
Čo sa stane, ak do zoznamu pridáme príliš veľa prvkov vo vnútri funkcie?
sobes.tech AI
Odpoveď od AI
V jazyku Go je slice štruktúra, ktorá obsahuje ukazovateľ na pole, dĺžku a kapacitu. Ak pridáte príliš veľa prvkov do slice, prekročíte jeho aktuálnu kapacitu, Go automaticky pridelení nový väčší pole a skopíruje do neho dáta.
To znamená, že pri pridávaní prvkov sa môže slice preusporiadať, čo spôsobí dodatočné náklady na čas a pamäť. Ak pridávate prvky do slice v rámci funkcie bez vrátenia nového slice, zmeny nemusia byť zachované, pretože slice sa odovzdáva hodnotou (struktúra sa kopíruje, ale nie dáta).
Príklad:
func appendElements(s []int) {
for i := 0; i < 1000; i++ {
s = append(s, i) // pri prekročení kapacity sa vytvorí nový slice
}
}
// Aby sa zmeny zachovali, je potrebné vrátiť slice:
func appendElementsCorrect(s []int) []int {
for i := 0; i < 1000; i++ {
s = append(s, i)
}
return s
}
Pri pridávaní veľkého množstva prvkov je dôležité brať do úvahy redistribúciu pamäti a správne pracovať s vrátenou hodnotou slice.