将类型sqlx.DB(jmoiron/sqlx) 转换为sql.DB(database/sql) 的最佳方法是什么?我目前正在使用该包github.com/golang-migrate/migrate,它需要一个现有的连接来遵循sql.DB接口。func Migrate(db *sqlx.DB) error { driver, err := postgres.WithInstance(db, &postgres.Config{}) m, err := migrate.NewWithDatabaseInstance( "file://src/db/migrations", "postgres", driver) if err != nil { return err } return m.Up()}更新:我混合了描述并添加了更多细节。标题是正确的。
2 回答

慕姐4208626
TA贡献1852条经验 获得超7个赞
您可以使用 sqlx 的方法将sql.DB(这是一个结构,而不是接口)转换为:代码sqlx.DBNewDb
此方法需要您*sql.DB以及驱动程序名称作为字符串。
这是一个使用“mysql”作为驱动程序的示例:
var myDb *sql.DB
...
anSqlxDb := sqlx.NewDb(myDb, "mysql") // returns *sqlx.DB
编辑:要添加评论中提出的新问题的答案,也可以反过来并*sql.DB从*sqlx.DB.
该*sqlx.DB结构包含一个嵌入的*sql.DB(代码)。作为嵌入式结构,可以使用其类型名称 ( DB) 检索它:
var mySqlxDb *sqlx.DB
...
var anSqlDb := mySqlxDb.DB

白猪掌柜的
TA贡献1893条经验 获得超10个赞
在文档中
sqlx.DB 是 sql.DB 的包装器,它在打开时跟踪驱动程序名称,主要用于使用正确的绑定变量自动绑定命名查询。
所以你可以这样做
db, err := sqlx.Connect("postgres", "user=foo dbname=bar sslmode=disable")
sqlDB := db.DB // sqlDB is *sql.DB
- 2 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消