sql.Openは、データベースへの接続を実際には開きません。
sql.DBは、データベースへの接続のプールを維持します。データベースにクエリを実行するたびに、プログラムはこのプールから接続を取得しようとするか、そうでない場合は新しい接続を作成しようとします。これらの接続は、閉じるとプールに戻されます。
これがrows.Close()
です does.Your db.QueryRow("...")
Scan(...)
を呼び出すと、内部的に同じことを行います 。
基本的な問題は、作成するクエリが多すぎて、それぞれに接続が必要であるが、接続を十分に速く閉じていないことです。このように、プログラムはクエリごとに新しい接続を作成する必要があります。
SetMaxOpenConns を呼び出すことにより、プログラムが使用する接続の最大数を制限できます。 sql.DBで。
http://go-database-sql.org/surprises.html を参照してください。 詳細については。