defer метода с pointer-ресивером и return поля

Что выведетMiddleбесплатно05-t014

Метод регистрирует через defer вызов другого метода, который меняет поле и печатает его, затем сам присваивает полю иное значение и возвращает его. Что выведет программа?

main.gogo
1package main2 3import "fmt"4 5type state struct {6	value int7}8 9func (s *state) apply() {10	s.value = 111	fmt.Println(s.value)12}13 14func (s *state) run() int {15	defer s.apply()16	s.value = 217	return s.value18}19 20func main() {21	s := &state{}22	fmt.Println(s.run())23	fmt.Println(s.value)24}
Чем закончится программа?
Сначала подумай без запуска — на собесе компилятора не будет.