新手请教,示例代码:
db := openDb()
defer db.Close()
for i := 0; i < 10; i++ {
go queryDb(db, i)
}
上面这里的defer是无效的,因为queryDb在不同的协程里,
那么这个close应该放在哪里呢?
func queryDb(db, i){
defer db.Close()
...
}
这样也不行,因为连接要被多个协程共享,不能被某一个单独关闭。
补充:
所以只能这样对吗?
db := openDb()
for i := 0; i < 10; i++ {
go queryDb(db, i)
}
func queryDb(db db.Conn, i int) {
db.Exec()
notify()
}
waitAll() //使用等待任务全完成
db.Close()
把 db 变量定义为全局变量,那样你的 queryDb 就直接能使用,db 的 open 和 close 都在主函数里操作就成。