Что копируется при передаче слайса в функцию

«Что копируется при передаче слайса в функцию» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При передаче слайса в функцию копируется только его заголовок (структура с указателем на массив, длиной и ёмкостью). Сам массив данных не копируется. Это значит, что изменения элементов слайса внутри функции будут видны снаружи, но изменение длины или ёмкости (например, через append) не повлияет на оригинальный слайс.

Пример:

func modifySlice(s []int) {
    s[0] = 100 // изменит оригинальный массив
    s = append(s, 200) // не повлияет на оригинальный слайс
}

func main() {
    s := []int{1, 2, 3}
    modifySlice(s)
    fmt.Println(s) // [100, 2, 3]
}