Junior — Middle
Lze přidávat prvky do slice, který je předán jako argument funkce?
sobes.tech AI
Odpověď od AI
Ano, je možné přidávat prvky do řezného pole (slice), které je předáno funkci, ale je důležité pochopit, že v Go je řezné pole (slice) strukturou obsahující ukazatel na pole, délku a kapacitu.
Pokud ve funkci použijete append a přiřadíte výsledek lokální proměnné, změny neovlivní původní řezné pole mimo funkci, pokud nevrátíte nový řez nebo nepředáte ukazatel na řezné pole.
Příklad:
func addElement(s []int) []int {
s = append(s, 42) // přidání prvku
return s
}
func main() {
s := []int{1, 2, 3}
s = addElement(s) // je třeba přiřadit zpět
fmt.Println(s) // [1 2 3 42]
}
Pokud chcete změnit řezné pole uvnitř funkce bez jeho vrácení, můžete předat ukazatel:
func addElementPtr(s *[]int) {
*s = append(*s, 42)
}
func main() {
s := []int{1, 2, 3}
addElementPtr(&s)
fmt.Println(s) // [1 2 3 42]
}