Как открыть дб соединение только при наличии запроса в golang - PullRequest
0 голосов
/ 01 апреля 2020

Итак, что я собираюсь сделать, это попытаться открыть соединение с БД, когда есть http-запрос, и снова закрыть. Я использую пакет pgx и gin, вот что я делаю:

func handleGetUsers(c *gin.Context) {
connectDB()
data, err := allUsers()
if err != nil {
    log.Println(err)
    return
}

results := struct {
    Count int    `json:"count"`
    Data  []User `json:"data"`
}{
    Count: len(data),
    Data:  data,
}

c.JSON(200, results)
defer connectDB()

}

Но если я пытаюсь сделать еще один такой же запрос http, соединение с базой данных уже закрыто. Есть ли что-то, что я могу сделать, или мой лог c был не прав после всех

1 Ответ

1 голос
/ 28 апреля 2020

Вероятно, ваши намерения немного накладные.

Веб-сервер выполняет функцию Go всякий раз, когда вы запрашиваете URL вашего сервера. Если это означает выполнение запроса sql - он будет выполнен и соединение будет закрыто. Веб-сервер возвращает результат, и связь между сервером и клиентом завершена.

Что я могу предложить, так как я считаю, что вы хотите повысить производительность своего gin-goni c, так это использовать параллельное выполнение запросов к БД в Gin.

    messages := make(chan string)
router.GET("/db_connection",func(c *gin.Context){

    c.Copy()

    go func(
        connectDB()
    <-messages
    ){}()

    data, err := allUsers()
    if err != nil {
        log.Println(err)
        return
    }

    results := struct {
        Count int    `json:"count"`
        Data  []User `json:"data"`
    }{
        Count: len(data),
        Data:  data,
    }

    c.JSON(200, results)
    go func(
        connectDB()
    <-messages
    ){}()




})
...