Какой вывод получит программа

Программа напечатает 0. Increment с получателем Count изменяет копию счётчика, а не переменную count из main.

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

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

Программа напечатает 0. Increment с получателем Count изменяет копию счётчика, а не переменную count из main.

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

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

Условие

В данном примере объявлен пользовательский тип Count и метод Increment, который увеличивает значение счётчика. В функции main создаётся переменная этого типа, вызывается метод Increment и затем значение выводится на экран. Определите, какой результат будет напечатан.

type Count int

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

func main() {
  var count Count
  count.Increment()
  fmt.Print(count)
}

Ответ

Программа напечатает 0. Increment с получателем Count изменяет копию счётчика, а не переменную count из main.

Нулевое значение целочисленного типа Count равно 0. Метод получает это значение по копии и увеличивает лишь локальную переменную c.

Для изменения вызывающей переменной нужен указатель: func (c *Count) Increment() { (*c)++ }. Вызов count.Increment() останется допустимым для адресуемой переменной. Альтернатива — вернуть увеличенное значение и присвоить его снаружи. Ни один из этих вариантов сам по себе не защищает от конкурентного доступа.

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

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

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

Подробнее