Можно ли мутировать данные переданного слайса

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

Ответ

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

Пример:

func modifySlice(s []int) {
    s[0] = 100 // Изменение элемента
    s = append(s, 200) // Добавление элемента (не отразится на оригинале, если не хватает capacity)
}

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

Важно: изменение длины (append) может создать новый массив, если не хватает capacity. Чтобы изменения append сохранились, нужно возвращать новый слайс или передавать указатель на слайс (*[]int).