首页 > 解决方案 > Go 数据库连接器:go-sql-driver 工作正常,其他一切“未知驱动程序,忘记导入?”

问题描述

当我尝试以这种方式使用 database/sql 时,它会编译并工作:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

但是,如果我尝试使用 postgres 特定的连接器,它甚至不会编译:

import(
    "database/sql"
    _ "github.com/lib/pq"
)

import(
    "database/sql"
    _ "github.com/jbarham/gopgsqldriver"
)

两者都因错误而失败

sql: unknown driver "mysql" (forgotten import?)

我已经完成了这两个包的获取,我真的不确定为什么它没有编译

标签: sqlgopostgresql-9.3

解决方案


你在做什么

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

稍后的?"github.com/lib/pq"例如,当您导入时,它通过调用注册自己sql.Register,然后在sql.Open您的源代码中:

func Open(driverName, dataSourceName string) (*DB, error) {
    driversMu.RLock()
    driveri, ok := drivers[driverName]
    driversMu.RUnlock()
    if !ok {
        return nil, fmt.Errorf("sql: unknown driver %q (forgotten import?)", driverName)
    }
}

因此,由于您不再导入mysql,您需要更改sql.Open为使用pq驱动程序(或您最终选择的任何一个)。


推荐阅读