Sobes.tech
Junior — Middle

Могу ли се елементи додавати у слайс који је прослеђен као аргумент у функцију?

sobes.tech АИ

Одговор од АИ

Da, moguće je dodavati elemente u listu (slice) koja je prosleđena funkciji, ali je važno razumeti da je u Go-u list (slice) struktura koja sadrži pokazivač na niz, dužinu i kapacitet.

Ako u funkciji koristite append i rezultat dodelite lokalnoj promenljivoj, promene neće uticati na originalni list van funkcije, osim ako ne vratite novi list ili prosledite pokazivač na listu.

Primer:

func addElement(s []int) []int {
    s = append(s, 42) // dodavanje elementa
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = addElement(s) // potrebno je ponovo dodeliti
    fmt.Println(s) // [1 2 3 42]
}

Ako želite da izmenite listu unutar funkcije bez vraćanja, možete proslediti pokazivač:

func addElementPtr(s *[]int) {
    *s = append(*s, 42)
}

func main() {
    s := []int{1, 2, 3}
    addElementPtr(&s)
    fmt.Println(s) // [1 2 3 42]
}