```go
var (
db = sql.Open()
ch = make(chan int, 3)
)
func main() {
go func() {
ticker = time.NewTicker(time.Second)
for t := range ticker.C {
work()
}
}
}
func work() {
go query1()
go query2()
go query3()
for j := 0; j < 3; j++ {
<-ch
}
}
func query1() {
rows, err := db.Query()
checkErr(err)
defer rows.Close()
for rows.Next() {
//parse
}
ch <- 1 // 查下结果
}
```
#### 碰到这样几个疑惑
1. db是有链接池的,为什么查到本机链接数据库的端口号会隔(2~3秒换掉),是不是每个conn执行语句数有上限呢?超过就close而不是放回连接池??
2. 执行n次后,不再继续了,发现停在rows.Next()里了(这是什么原因呢?)
最后还想问下有没有更好的实现方式,周期性执行jobA,jobA=(数据准备获取n个goroutine结果,干正事)
> 1. db是有链接池的,为什么查到本机链接数据库的端口号会隔(2~3秒换掉),是不是每个conn执行语句数有上限呢?超过就close而不是放回连接池??
看了下sql实现,自己来回答下
* maxLifetime // maximum amount of time a connection may be reused
* maxIdle // zero means defaultMaxIdleConns; negative means 0
#1