170 похожих чатов

Всем хорошего новогоднего настроения. Подскажите, пожалуйста, правильно ли делаю. У меня

есть такой код (где я захотел облегчить себе жизнь, чтобы не писать лишнего кода):
func Query(query string, params ...interface{}) func(...interface{}) {
conn := GetConnection()
defer ReleaseConnection(conn)

rows, err := conn.Query(query, params...)
if err != nil {
panic(err)
}
return func(results ...interface{}) {
defer rows.Close()

for rows.Next() {
err := rows.Scan(results...)
if err != nil {
panic(err)
}
}
}
}
Тут происходит следующее:
1) Берётся из connection pool’а conn + освобождает его в конце функции
2) Делает запрос в базу данных
3) Возвращает функцию, которая считывает данные, которые в нее передают

Использую так:
getResult := helpers.Query(`
SELECT username
FROM users
WHERE id=$1
LIMIT 1
`, userID)

var username pgtype.Varchar
getResult(&username)

return username.String

Но проблемы начинаются, когда захотел считать несколько рядов (что очевидно). Хотел сейчас сделать так, чтобы он возвращал канал, по которому уже возвращал результат, но тогда вопрос как сделать так, чтобы канал был на подобии “variadic”. Можете подсказать, кто с похожим сталкивался?

2 ответов

16 просмотров

А зачем так?

Во-первых, конекшен не надо ручками брать и возвращать в пул, sql.DB сам это делает, во-вторых, нужен просто маппинг результата запроса в структуру, для этого можно sqlx заюзать

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта