Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: value, copy

В чем разница между передачей значения и передачей указателя в Go?

Вопрос проверяет понимание модели памяти Go и того, как параметры функций передаются и изменяются.

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

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

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

Передача параметров в Go всегда происходит по значению, но этим значением может быть как само значение, так и указатель.

Передача значения

При передаче значения происходит копирование данных.

Пример:

func change(x int) {
    x = 10
}

func main() {
    a := 5
    change(a)
    // a остается 5
}

Особенности:

  1. Изменения внутри функции не влияют на оригинал.

  2. Копирование может быть дорогим для больших структур.

  3. Такой подход безопаснее, так как исключает случайные изменения.

Передача указателя

Если передается указатель, копируется только адрес, а не данные.

func change(x *int) {
    *x = 10
}

Особенности:

  1. Можно изменить исходную переменную.

  2. Меньше затрат памяти при работе с большими структурами.

  3. Требует аккуратности, чтобы не получить гонки данных.

Когда что использовать

Обычно:

  1. Малые структуры — передача значения.

  2. Большие структуры или необходимость изменения — указатель.

  3. Методы, изменяющие состояние структуры — pointer receiver.

Вывод

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    3

Навыки

  • Golang

    Golang

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

#value

#copy

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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