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]
}