Go 数据库连接器:go-sql-driver 工作,其他一切 "unknown driver, forgotten import?"

Go Database Connector: go-sql-driver works, everything else "unknown driver, forgotten import?"

当我尝试以这种方式使用 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?)

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

你在做什么

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 驱动程序(或您最终选择的驱动程序)。