我正在使用 github.com/go-sql-driver/mysql 驱动程序。我打开一个数据库:db, err := sql.Open("mysql", str)然后我有两个函数,每个函数使用以下 mysql 代码调用 200 次:rows, err := db.Query("select name from beehives")if err != nil { panic(err)} defer rows.Close()第二: err = db.QueryRow("select id, secret, shortname from beehives where shortname = ?", beehive).Scan(&id, &secre switch { case err == sql.ErrNoRows: err = errors.New("Beehive '"+beehive+"' not found.") case err != nil: panic("loginBeehive: "+ err.Error()) default: // ... do the work第一个是恐慌。当我只打开一次数据库时,怎么会有多个连接,我该如何关闭它们?
3 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
*DB
您返回的对象sql.Open
不对应于单个连接。最好将其视为数据库的句柄:它为您管理连接池。
您可以控制打开的连接与数`(* DB).SetMaxOpenConns和其对怠速连接。
所以基本上这里发生的事情是,db.Query
并db.QueryRow
尝试为自己获取连接,而数据库句柄不会对同时连接的数量施加任何限制,因此当它打开的数量超过 mysql 可以处理的数量时,您的代码会出现恐慌。
慕田峪4524236
TA贡献1875条经验 获得超5个赞
尽量让准备好的发言db.Prepare(query string) (*Stmt, error)
和比stmt.Query
或stmt.Exec
比stmt.Close
重用连接。
- 3 回答
- 0 关注
- 286 浏览
添加回答
举报
0/150
提交
取消