Mysql “返回”;“连接太多”;错误

Mysql “返回”;“连接太多”;错误,mysql,go,database-connection,Mysql,Go,Database Connection,我在做这样的事情: import( "database/sql" "github.com/go-sql-driver/mysql" ) var db *sql.DB func main() { var err error db, err = sql.Open(...) if err != nil { panic(err) } for j := 0; j < 8000; j

我在做这样的事情:

import(
    "database/sql"
    "github.com/go-sql-driver/mysql"
)

var db *sql.DB

func main() {
    var err error
    db, err = sql.Open(...)

    if err != nil {
        panic(err)
    }

    for j := 0; j < 8000; j++ {
        _, err := db.Query("QUERY...")
        
        if err != nil {
            logger.Println("Error " + err.Error())
            return
        }
    }
 }
很明显我做错了什么,但我找不到是什么。我不知道如何为每个查询打开和关闭新连接

Error in the log file : 
"reg: 2020/06/28 03:35:34 Errores  Error 1040: Too many connections"
(it is printed only once)

Error in mysql php my admin: 
 "mysqli_real_connect(): (HY000/1040): Too many connections"
 "La conexión para controluser, como está definida en su configuración, fracasó."
(translated: "the connection for controluser, as it is defined in ti's configuration , failed.")
 "mysqli_real_connect(): (08004/1040): Too many connections"

每次调用
Query()
,都会创建一个新的数据库句柄。每个活动句柄都需要一个唯一的数据库连接。因为您没有调用,所以在程序退出之前,该句柄和连接一直保持打开状态

完成每个查询后,通过调用
rows.Close()
来解决问题:

j:=0的
;j<8000;j++{
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
//你的主要逻辑在这里
行。关闭()
}
Close()
调用通常在
defer
语句中调用,但这排除了使用for循环(因为
defer
仅在函数返回时执行),因此您可能希望将主逻辑移到新函数:

j:=0的
;j<8000;j++{
多斯塔夫()
}
//后来
func doStuff(){
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
延迟行。关闭()
//你的主要逻辑在这里
}

每次调用
Query()
,您都在创建一个新的数据库句柄。每个活动句柄都需要一个唯一的数据库连接。因为您没有调用,所以在程序退出之前,该句柄和连接一直保持打开状态

完成每个查询后,通过调用
rows.Close()
来解决问题:

j:=0的
;j<8000;j++{
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
//你的主要逻辑在这里
行。关闭()
}
Close()
调用通常在
defer
语句中调用,但这排除了使用for循环(因为
defer
仅在函数返回时执行),因此您可能希望将主逻辑移到新函数:

j:=0的
;j<8000;j++{
多斯塔夫()
}
//后来
func doStuff(){
行,err:=db.Query(“查询…”)
如果错误!=零{
logger.Println(“错误”+err.Error())
返回
}
延迟行。关闭()
//你的主要逻辑在这里
}

我使用了第一个建议(withdout defer),但现在脚本需要大约2分钟才能执行,这正常吗?我能快点吗?这可能很正常。按顺序执行8000个查询不是立即的。我使用了第一个建议(withdout defer),但现在脚本执行大约需要2分钟,这正常吗?我能快点吗?这可能很正常。按顺序执行8000个查询并不是立竿见影的。
Error in the log file : 
"reg: 2020/06/28 03:35:34 Errores  Error 1040: Too many connections"
(it is printed only once)

Error in mysql php my admin: 
 "mysqli_real_connect(): (HY000/1040): Too many connections"
 "La conexión para controluser, como está definida en su configuración, fracasó."
(translated: "the connection for controluser, as it is defined in ti's configuration , failed.")
 "mysqli_real_connect(): (08004/1040): Too many connections"