Вопрос: Как правильно использовать `defer` внутри цикла и когда это плохо?
Python
Senior
Без компании
Вопрос: Как правильно использовать `defer` внутри цикла и когда это плохо?
Ответы
```go
for _, name := range files {
f, err := os.Open(name)
if err != nil { continue }
// ПЛОХО: defer в цикле копит открытые файлы до конца функции
defer f.Close()
}
// Лучше:
for _, name := range files {
func() {
f, err := os.Open(name)
if err != nil { return }
defer f.Close()
// work
}()
}
```
**Как это работает:** `defer` выполняется при выходе из функции, а не итерации. В цикле это может копить ресурсы.