如何导入两个包都是registe驱动mysql

时间:2017-05-12 00:45:25

标签: mysql sql go

我的项目需要导入两个包,而每一个注册mysql驱动程序,我得到了 与panic: sql: Register called twice for driver mysql恐慌 如何解决这个问题

1 个答案:

答案 0 :(得分:1)

您需要以某种方式重新构建项目,以便您不会在同一过程中导入两个驱动程序。

通常,实现SQL驱动程序的软件包会有一个" init()"他们会做以下事情的功能:

sql.Register("mysql", &MySQLDriver{})

参见例如: https://github.com/go-sql-driver/mysql/blob/master/driver.go#L182

但是如果相同的驱动程序名称按文档中的说明注册了两次,则Register函数将抛出错误: https://golang.org/pkg/database/sql/#Register

原因是你尝试这样做才能真正使用驱动程序:

db, err := sql.Open("mysql", someDBUrl)

那么,如果sql库允许你用同一个名字注册多个驱动程序,那么它应该如何确定要使用的驱动程序呢?