Middle
Šta će se desiti ako dodamo previše elemenata u slice unutar funkcije?
sobes.tech АИ
Одговор од АИ
U Go, slice je struktura koja sadrži pokazivač na niz, dužinu i kapacitet. Ako dodate previše elemenata u slice, premašujući njegov trenutni kapacitet, Go automatski dodeljuje novi niz veće veličine i kopira podatke tamo.
To znači da se prilikom dodavanja elemenata slice može redistribuirati, što dovodi do dodatnih troškova u vremenu i memoriji. Ako dodajete elemente u slice unutar funkcije bez vraćanja novog slice-a, promene možda neće biti sačuvane, jer se slice prosleđuje po vrednosti (struktura se kopira, ali ne i podaci).
Primer:
func appendElements(s []int) {
for i := 0; i < 1000; i++ {
s = append(s, i) // kreira se novi slice kada se prekorači kapacitet
}
}
// Da bi promene ostale, potrebno je vratiti slice:
func appendElementsCorrect(s []int) []int {
for i := 0; i < 1000; i++ {
s = append(s, i)
}
return s
}
Stoga, kod dodavanja velike količine elemenata, važno je uzeti u obzir redistribuciju memorije i pravilno raditi sa vraćenom vrednošću slice-a.