go 是如何实现多个goroutine共用一个数据库连接资源?
package main
var conn *sql.DB
func main(){
var err error
conn,err = sql.Open(xxx)
for i:=1; i<=10000; i++ {
go func(){
// 这里conn 在一定数据量后会出现 nil
rows, err := conn.Query(xxxxxxx)
defer rows.Close()
}()
}
}
这种看起来像是连接资源还没释放,同时另一个goroutine 又去取 conn, 然后根本取不到,
这种情况下改如何加锁控制呢?
没有复现,只要 conn.Query() 就会 err,添加 conn.SetMaxOpenConns(num) 即可复用连接