2017-08-17 87 views
-2

当我尝试建立我的项目,它说:Golang建立自己的错误:无法分配* sqlx.DB为* sql.DB

./main.go:140: cannot assign *sqlx.DB to db.Conn (type *sql.DB) in multiple assignment 

我进口main.go:

import (
    "html/template" 
    "io/ioutil" 
    "net/http" 
    "regexp" 
    "./network" 
    "log" 
    "./config" 
    "./db" 
    "fmt" 
    "github.com/jmoiron/sqlx" 
) 

我db.go是:

package db 
import "database/sql" 
import _ "github.com/go-sql-driver/mysql" 

var Conn *sql.DB 
var Err error 

而且从main.go第140行:

db.Conn, db.Err = sqlx.Open(config.Db.Type, config.Db.User+":"+config.Db.Pass+"@/"+config.Db.Name) 

感谢您的帮助。

+4

是的,'sql.DB'和'sqlx.DB'是不同的类型。另一方面,不要使用相对路径导入。它们在大多数情况下不起作用,只能在GOPATH之外进行快速测试。始终使用完整的导入路径。 – JimB

+0

谢谢。这太容易了:D 但为什么我不应该使用相对路径?现在工作正常。 –

+0

相对路径可能正常工作,因为您只使用package目录中的'go build'或'go install'。这在打包工具需要按名称引用包时会中断。它也打破了你需要在包之间共享类型的原因,因为类型是通过它们的导入路径进行规范化的,所以从'./config'输入'T'与'../ config'类型'T'的类型不同。 – JimB

回答

1

sqlx.Open返回一个sqlx.DB结构(here的定义),它与package databqase/sql中的DB结构定义不同。
更改Conn类型为sqlx.DB它应该工作。

相关问题