Будут ли видны изменения в переданном слайсе в глобальной области видимости

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

Ответ

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

Пример:

func modifySlice(s []int) {
    s[0] = 100 // Изменение элемента
    s = append(s, 200) // Добавление элемента (может создать новый массив, если ёмкость исчерпана)
}

func main() {
    slice := []int{1, 2, 3}
    modifySlice(slice)
    fmt.Println(slice) // [100 2 3] или [100 2 3 200], если append не переаллоцировал массив
}

Изменения элементов видны, но добавление новых элементов может не отразиться, если произошло переаллоцирование.