string, args ...any) (result bool, err error) {
res, err := d.db.Query(query, args...)
if err != nil {
return
}
err = res.Scan(&result)
return
}
QueryRow[Context]
ну и я бы еще явно ошибку после скана проверял
QueryContext(ctx, ...) наверное имел в виду
Там же один результат возвращается я имел в виду QueryRow или QueryRowContext. И rows тогда не надо закрывать, в первоначальном виде этого нет почему то
не хватает проверок на NotFound, UniqueViolation и соотвественно отдавать надо не pg ошибки, а свои из DAL, чтобы уже на слое с БЛ проверять эти ошибки и иметь возможность написать логику на них.
знаю что она кастрированная, но там вроде есть ошибки
там так-то ошибок никаких и не может возникнуть, кроме как если диск посыпется, допустим у меня выше этой функции просто стоит паник, если err != nil ибо если вылетит какая то ошибка = дальше оно уже работу никак не может продолжить
а какой тут толк мне от контекста? // rows.Close() я так понимаю в таком случае нужно добавить обязательно?
https://go.dev/doc/database/querying а тут Rows не закрывается нигде, кроме последнего примера🤔
func albumsByArtist(artist string) ([]Album, error) { rows, err := db.Query("SELECT * FROM album WHERE artist = ?", artist) if err != nil { return nil, err } defer rows.Close()
там queryROW. его не нужно закрывать, его я и предложил.
контекст - стандартный способ отменить что то, напрмер io прекратить которое уже не нужно это лишь предложение, иметь контекст всегда приятней чем его не иметь
тоесть, вот так? func (d *DB) queryBool(query string, args ...any) (result bool, err error) { res := d.db.QueryRow(query, args...) err = res.Scan(&result) return } или лучше вот так? func (d *DB) queryBool(query string, args ...any) (bool, error) { var result bool res := d.db.QueryRow(query, args...) err := res.Scan(&result) return result, err }
мне первый больше нравится, но можно еще 1 и 2 строки в одной написать func (d *DB) queryBool(query string, args ...any) (result bool, err error) { err = d.db.QueryRow(query, args...).Scan(&result) return }
контекст тут нужен для выставления таймаута. Чтобы приложение навечно не зависло на этой операции
напомню, что у меня sqlite
ну если хочется можно не писать, дело хозяйское) Но хуже точно не будет
Обсуждают сегодня