Oleg Alexandrov

defer

Назад

Аргументы отложенной функции оцениваются, когда оценивается оператор defer:

func a() {
   i := 0
   defer fmt.Println(i)
   i++
   return
}
// 0

Отложенные вызовы функций выполняются в порядке “последний пришел - первый вышел” (Last In First Out, LIFO) после возврата окружающей функции:

func b() {
   for i := 0; i < 4; i++ {
      defer fmt.Print(i)
   }
}
// 3210

Отложенные функции могут читать и присваивать возвращаемой функции именованные возвращаемые значения:

func c() (i int) {
   defer func() { i++ }()
   return 1
}
// 2

Назад