当在名为 dbutil 的单独包中使用 go-sql-driver 和 mysql 和 gorp 时,我收到以下错误 错误 1045:用户 'root'@'localhost' 的访问被拒绝(使用密码:NO)
package dbutil
import (
"cropz/structs"
"database/sql"
"github.com/coopernurse/gorp"
_ "github.com/go-sql-driver/mysql"
"log"
)
func InitDB() *gorp.DbMap {
// connect to db
db, err := sql.Open("mysql", "root:pass@tcp(127.0.0.1:3306)/jsl")
defer db.Close()
err = db.Ping()
checkErr(err, "Ping failed")
// construct a gorp DbMap
dbmap := &gorp.DbMap{Db: db, Dialect: gorp.MySQLDialect{"InnoDB", "UTF8"}}
return dbmap
}
package main
func main() {
dbmap := dbutil.InitDB()
err := dbmap.Db.Ping()
checkErr(err, "Ping failed")
}
如果我在主包中有 initDB() 函数,它可以正常工作。
只有在单独的包中与 martini 框架和 dbutil 一起使用时才会发生这种情况。使用 martini 框架并在同一个包中它仍然有效。
我正在使用 windows,MySQL-5.0.22。请帮忙。
谢谢, 奎师那
最佳答案
您的错误看起来像是登录失败。您的 DSN 设置是否正确?
除此之外,您应该删除 defer db.Close()
我认为您应该只在根据规范实际完成 Db 后才关闭它。
当我运行你的代码时,我实际上得到了这个错误
panic: sql: database is closed
关于mysql错误在单独的包中使用时拒绝使用go-sql-driver的用户访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195460/