Golang. Как исправить ошибку "use of closed network connection"?
Разрабатываю api на языке golang используя фрэймворк gin. API сервер выдаёт информацию в виде JSON.
Запросы по http работают нормально. Но спустя пару запросов через ajax, я не могу больше брать информацию с сервера ни по url, ни через ajax.
Headers я так же указываю, как на сервере, так и на javascript.
Headers на api сервере:
r := gin.New()
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD"},
AllowHeaders: []string{"*"},
ExposeHeaders: []string{"*"},
AllowCredentials: true,
AllowOriginFunc: func(origin string) bool {
return origin == "*"
},
MaxAge: 12 * time.Hour,
}))
API Сервер постоянно при запросе по url выдаёт данную ошибку:
read tcp 127.0.0.1:44188->127.0.0.1:5432: use of closed network connection
set tcp 127.0.0.1:44188: use of closed network connection
Логи контейнера:
2021-03-22 18:36:22.166 UTC [1] LOG: starting PostgreSQL 13.1 (Debian 13.1-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
2021-03-22 18:36:22.166 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2021-03-22 18:36:22.166 UTC [1] LOG: listening on IPv6 address "::", port 5432
2021-03-22 18:36:22.324 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-03-22 18:36:22.548 UTC [75] LOG: database system was shut down at 2021-03-22 18:36:21 UTC
2021-03-22 18:36:22.628 UTC [1] LOG: database system is ready to accept connections
2021-03-22 19:37:28.737 UTC [204] LOG: could not receive data from client: Connection reset by peer
2021-03-22 19:37:50.508 UTC [205] LOG: could not receive data from client: Connection reset by peer
2021-03-22 19:42:53.344 UTC [213] LOG: could not receive data from client: Connection reset by peer
2021-03-22 20:06:24.316 UTC [218] LOG: could not receive data from client: Connection reset by peer
Как исправить данную проблему?
Ответы (1 шт):
все вызовы row.Scan() должны быть проверены на наличие ошибок.
я добавил ошибки и обнаружил сообщение conn is busy и после уже use of closed network connection.
pgx.Connect() возвращает pgx.Conn который не может работать для параллельных запросов. Документация говорит.
Conn is a PostgreSQL connection handle. It is not safe for concurrent usage. Use a connection pool to manage access to multiple database connections from multiple goroutines.
поэтому заменяем pgx.Connect() на pgxpool.Connect() из github.com/jackc/pgx/pgxpool.