Что выведет этот код с defer?

Junior
379 просмотров
AFK Offer AI

Классика: func main() { for i := 0; i < 3; i++ { defer fmt.Println(i) } }. Ответ: 2, 1, 0. Defer — LIFO (стек), аргументы вычисляются в момент defer, не в момент выполнения. Другой вариант: defer func() { fmt.Println(i) }() — closure захватывает переменную, выведет 3, 3, 3 (значение после цикла). Разница между передачей аргумента и closure — ключевая. На собесе дают код и просят назвать вывод. Знание этих нюансов отличает от тех, кто просто слышал про defer.

Следующий вопрос

Что такое proxy layer?