我具有以下项目结构:
-main.go
-db
--dbinit.go
在dbinit.go
中,我有以下代码:
package db
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
var Db *sql.DB
var err error
func init() {
Db, err = sql.Open("mysql", "myDBCreds")
defer Db.Close()
}
在main.go
中,我有:
package main
import (
db "./db"
)
func main() {
defer db.Db.Close()
sqlStatement := `INSERT INTO table (field1, field2)
VALUES ($1, $2)
`
_, err := db.Db.Exec(sqlStatement, param1, param2)
if err != nil {
panic(err)
}
但是main.go
不断抛出错误:
sql:数据库已关闭
我在做什么错了?
答案 0 :(得分:1)
来自先前提出的问题
返回的数据库可安全地供多个goroutine并发使用,并维护其自己的空闲连接池。因此,Open函数应仅被调用一次。几乎不需要关闭数据库。
再也不要关闭它。