Sobes.tech
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.