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

Исходник синтаксически неверен. Если оформить func main и создать x := X{123}, отложенный x.S() напечатает 456.

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

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

Исходник синтаксически неверен. Если оформить func main и создать x := X{123}, отложенный x.S() напечатает 456.

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

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

Условие

Определите, какой текст будет напечатан в консоль при запуске следующего кода на Go:

type X struct {
    V int
}

func (x * X) S(){
    fmt.Println(x.V)
        }
main()        
x := x{123}
defer x.S()
x.V = 456  

Ответ

Исходник синтаксически неверен. Если оформить func main и создать x := X{123}, отложенный x.S() напечатает 456.

Метод S имеет получатель *X. При регистрации defer сохраняется указатель на тот же объект, а не копия значения V. До выполнения defer поле этого объекта меняется на 456.

Исправленная последовательность внутри main: x := X{123}; defer x.S(); x.V = 456. Необходимо также подключить fmt. При получателе-значении func (x X) S() defer сохранил бы копию структуры, и результат был бы 123 — это другой контракт метода.

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

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

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

Подробнее