英文:
how to import two package both registe driver mysql
问题
你的项目需要导入两个包,而每个包都注册了MySQL驱动程序,但是你遇到了panic: sql: Register called twice for driver mysql
的错误。你想知道如何解决这个问题。
要解决这个问题,你可以尝试以下方法之一:
-
检查代码中是否重复注册了MySQL驱动程序。确保只在一个地方进行注册。
-
确保你的代码中只导入了一个MySQL驱动程序包。如果导入了多个包,可能会导致重复注册的错误。
-
如果你使用的是Go语言的
database/sql
包,可以使用sql.Register
函数注册MySQL驱动程序之前,先检查是否已经注册过。可以使用sql.Drivers
函数获取已注册的驱动程序列表,然后检查是否已经包含了MySQL驱动程序。
希望这些方法能够帮助你解决问题!
英文:
my project need to import two package ,while each one registe mysql driver,I got
panic with panic: sql: Register called twice for driver mysql
how to resolve this
答案1
得分: 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库应该如何确定要使用哪个驱动程序呢?
英文:
You will need to re-structure your project somehow so that you don't import both drivers in the same process.
Usually, packages implementing SQL drivers would have an "init()" function in which they would do something like:
sql.Register("mysql", &MySQLDriver{})
See for example:
https://github.com/go-sql-driver/mysql/blob/master/driver.go#L182
But the Register function will throw an error if the same driver name is registered twice as stated in the docs:
https://golang.org/pkg/database/sql/#Register
Reason for this is that you'd then try to do this to actually use the driver:
db, err := sql.Open("mysql", someDBUrl)
So how should the sql library determine the driver to use if it'd let you register more than one under the same name?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论