在单独的包中使用 go-sql-driver 时,mysql 错误访问被拒绝

在名为 dbutil 的单独程序包中使用 go-sql-driver 与 mysql 和 gorp 时,我收到以下错误错误 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")

}

如果我在主包中有 initDB() 函数,它就可以正常工作。


只有在单独的包中与 martini 框架和 dbutil 一起使用时才会发生这种情况。使用 martini 框架并在同一个包中它仍然有效。


我使用的是 Windows,MySQL-5.0.22。请帮忙。


一只斗牛犬
浏览 222回答 2
2回答

慕斯王

我删除了 pkg 文件夹中生成的 .a 文件,然后没有收到拒绝访问错误。

至尊宝的传说

您的错误看起来像是登录失败。您的 DSN 设置是否正确?除此之外,您应该删除 defer db.Close()我相信您应该只在根据规范实际完成后才关闭 Db。当我运行你的代码时,我实际上收到了这个错误panic: sql: database is closed
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go