Sobes.tech
Back to questions
Middle
3

Что происходит при передаче слайса в функцию и изменении его элементов?

Companies where asked
VKVK

Answer from AI

sobes.tech AI

В Go слайс — это структура, которая содержит указатель на массив, длину и ёмкость. При передаче слайса в функцию копируется именно эта структура (указатель, длина, ёмкость), а не сам массив.

Это значит, что внутри функции слайс указывает на тот же базовый массив, что и снаружи. Поэтому изменение элементов слайса внутри функции изменит элементы исходного массива.

Пример:

func modify(slice []int) {
    slice[0] = 100
}

func main() {
    s := []int{1, 2, 3}
    modify(s)
    fmt.Println(s) // Выведет [100 2 3]
}

Однако если внутри функции изменить сам слайс (например, сделать slice = append(slice, 4)), то это не повлияет на слайс снаружи, так как копируется структура слайса, а не ссылка на неё.