Sobes.tech
Назад к вопросам
Junior — Middle
79

Можно ли добавлять элементы к слайсу, переданному в функцию в качестве аргумента?

Ответ от нейросети

sobes.tech AI

Да, можно добавлять элементы к слайсу, переданному в функцию, но важно понимать, что слайс в Go — это структура, содержащая указатель на массив, длину и ёмкость.

Если в функции вы используете 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]
}