2017-08-17 85 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它應該工作。

相關問題