Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: golang, slice, memory, value, reference

Как в Go передаются слайсы — по значению или по ссылке?

Проверяет понимание хранения слайсов в памяти

Короткий ответ

В Go слайсы передаются по значению, но само значение содержит указатель на массив, длину и ёмкость. Копия слайса будет ссылаться на тот же массив, поэтому изменение элементов внутри слайса будет видно и в оригинале.

Длинный ответ

В Go слайс — это структура из трёх полей: указатель на массив, длина и ёмкость. Когда мы передаём слайс в функцию, копируется именно эта структура, но не сам массив данных.

Это значит:

  • Изменения элементов слайса внутри функции будут видны снаружи.

  • Изменение длины слайса с помощью append может привести к выделению нового массива, и тогда изменения не будут влиять на оригинал.

Пример:

func modify(s []int) {
    s[0] = 99
}

func main() {
    nums := []int{1, 2, 3}
    modify(nums)
    fmt.Println(nums) // [99 2 3]
}

Вывод: Понимание того, что передаётся копия структуры, но с общим массивом, важно для управления памятью и побочными эффектами.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Golang

    Golang

Ключевые слова

#golang

#slice

#memory

#value

#reference

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.