Что выведет: x := 1; defer fmt.Println(x); x = 2?

Middle
163 просмотров
AFK Offer AI

Выведет 1, а не 2. Аргументы defer вычисляются немедленно (в момент defer), а не при вызове deferred функции. x == 1 в момент defer, поэтому 1. Если нужно захватить текущее значение — используй closure: defer func() { fmt.Println(x) }() — выведет 2, потому что closure захватывает переменную по ссылке.

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

Как определить bloat в PostgreSQL?