Junior — Middle
Je možné pridávať prvky do slice, ktorý je odovzdaný ako argument do funkcie?
sobes.tech AI
Odpoveď od AI
Áno, je možné pridávať prvky do poľa (slice), ktoré je odovzdané funkcii, ale je dôležité pochopiť, že v Go je slice štruktúra obsahujúca ukazovateľ na pole, dĺžku a kapacitu.
Ak vo funkcii použijete append a výsledok priradíte lokálnej premennej, zmeny nebudú ovplyvňovať pôvodný slice mimo funkcie, pokiaľ nevrátite nový slice alebo neodovzdáte ukazovateľ na slice.
Príklad:
func addElement(s []int) []int {
s = append(s, 42) // pridanie prvku
return s
}
func main() {
s := []int{1, 2, 3}
s = addElement(s) // je potrebné opätovne priradiť
fmt.Println(s) // [1 2 3 42]
}
Ak chcete zmeniť slice vo vnútri funkcie bez jeho návratu, môžete odovzdať ukazovateľ:
func addElementPtr(s *[]int) {
*s = append(*s, 42)
}
func main() {
s := []int{1, 2, 3}
addElementPtr(&s)
fmt.Println(s) // [1 2 3 42]
}