GoLang: Если я вдруг забуду rows.Close()
Будет ли утечка памяти если я вдруг забуду rows.Close()
Пример кода:
import (
"sql"
)
func query() {
q := db.Query("SELECT * FROM users WHERE banned = 0")
for q.Next() {
// Что-то
}
}
Ответы (1 шт):
Close closes the Rows, preventing further enumeration. If Next is called and returns false and there are no further result sets, the Rows are closed automatically and it will suffice to check the result of Err. Close is idempotent and does not affect the result of Err.
Если Next был вызван и вернул false(то есть больше записей нет), то Close() будет вызван автоматически.
В вашем примере вы перебираете все элементы. Если нет точек выхода, то переживать не стоит. Но не все так просто.
Вероятнее, внутри цикла придется скинаровать резлуьтат в переменную. Сканирование может вернуть ошибку, а вы передадите ошибку выше, не закрыв Rows. Поэтому, лучше всегда закрывать, вызывая defer q.Close()