Junior — Middle
Може ли да добавяте елементи към слайс, предаден като аргумент на функция?
sobes.tech AI
Отговор от AI
Да, можете да добавяте елементи към срез, предаден на функцията, но е важно да разберете, че в Go, срезът (slice) е структура, която съдържа указател към масив, дължина и капацитет.
Ако в функцията използвате append и присвоите резултата на локална променлива, промените няма да повлияят на оригиналния срез извън функцията, освен ако не върнете нов срез или не предадете указател към среза.
Пример:
func addElement(s []int) []int {
s = append(s, 42) // добавяне на елемент
return s
}
func main() {
s := []int{1, 2, 3}
s = addElement(s) // трябва да присвоите отново
fmt.Println(s) // [1 2 3 42]
}
Ако искате да промените среза вътре във функцията без да го връщате, можете да предадете указател:
func addElementPtr(s *[]int) {
*s = append(*s, 42)
}
func main() {
s := []int{1, 2, 3}
addElementPtr(&s)
fmt.Println(s) // [1 2 3 42]
}