Sobes.tech
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]
}