Программа напечатает 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() останется допустимым для адресуемой переменной. Альтернатива — вернуть увеличенное значение и присвоить его снаружи. Ни один из этих вариантов сам по себе не защищает от конкурентного доступа.