Программа напечатает 0: Increment с получателем-значением увеличивает копию Counter, а исходный cnt не меняется.
Какой текст появится в консоли при запуске программы №1
Программа напечатает 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 автоматически возьмёт её адрес. Это исправляет передачу значения, но не обеспечивает потокобезопасность при конкурентных вызовах.