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 ответов

8 просмотров

А зачем так?

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

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта