英文:
mysql error Access denied for user with go-sql-driver when used in separate package
问题
在使用go-sql-driver、mysql和gorp时,在名为dbutil的单独包中使用时,我遇到了以下错误:
错误1045:用户'root'@'localhost'被拒绝访问(未使用密码)
如果我将initDB()函数放在主包中,它可以正常工作。
只有在与martini框架和单独包中的dbutil一起使用时才会出现此问题。与martini框架在同一个包中使用时仍然可以正常工作。
我正在使用Windows和MySQL-5.0.22。请帮忙解决。
谢谢,
Krishna
英文:
I am getting the following error when using with go-sql-driver with mysql and gorp when using in a separate package called dbutil
Error 1045: Access denied for user 'root'@'localhost' (using password: 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")
}
If I have the initDB() function in the main package, it works fine.
This happens only if used with martini framework and dbutil in separate package. With martini framework and in the same package it still works.
I am using windows, MySQL-5.0.22. Please help.
thanks,
Krishna
答案1
得分: 0
你的错误看起来像是登录失败。你的DSN设置正确吗?
除此之外,你应该移除defer db.Close()
。
根据规范,我认为你只应该在实际完成后关闭数据库。
当我运行你的代码时,实际上会出现以下错误:
panic: sql: database is closed
英文:
Your error looks like a login failure. Is your DSN setup appropriately?
Other than that you should remove the defer db.Close()
I believe you should only be closing the Db when you are actually done with it according to the spec.
When I run your code I actually get this error
panic: sql: database is closed
答案2
得分: 0
我删除了 pkg 文件夹中生成的 .a 文件,然后没有收到访问被拒绝的错误。
英文:
I deleted the .a files generated in the pkg folder and then didn't get the access denied error.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论