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

标签 mysql go

当在名为 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/

相关文章:

php - Laravel Eloquent 查询中的 Intval 函数

mysql - 如何将十进制计算结果存储在mysql中并像在内存中一样将其检索回来

MySQL 备份/恢复问题

docker - 从另一个容器访问Neo4J

go - 如何处理基于时间的一次性密码的 26 字节 secret ?

go - 我如何在intellij中查看nsq源代码?

google-app-engine - 数据存储四舍五入的时间字段

mysql - 在mysql中将字符串与curdate连接起来

Go界面优化

php - MySQL PHP 从数据库中选择和编辑值