Какой текст появится в консоли при запуске программы №1

Программа напечатает 0: Increment с получателем-значением увеличивает копию Counter, а исходный cnt не меняется.

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

Что ответить на собеседовании

Программа напечатает 0: Increment с получателем-значением увеличивает копию Counter, а исходный cnt не меняется.

Подробный разбор

Ответ с пояснениями

Условие

Что будет выведено на экран после выполнения следующего Go‑кода:

type Counter int

func (c Counter) Increment() {
    c++
}

func main() {
    var cnt Counter
    cnt.Increment()
    fmt.Print(cnt)
}

Обратите внимание, что метод Increment объявлен с получателем‑значением, а не указателем.

Ответ

Программа напечатает 0: Increment с получателем-значением увеличивает копию Counter, а исходный cnt не меняется.

Тип Counter имеет нулевое значение 0. В метод передаётся его копия, к которой и применяется c++. Возвращаемого значения у метода нет.

Для изменения исходного счётчика объявите func (c *Counter) Increment() { (*c)++ }. Вызов cnt.Increment() для адресуемой переменной останется допустимым: Go автоматически возьмёт её адрес. Это исправляет передачу значения, но не обеспечивает потокобезопасность при конкурентных вызовах.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее