2017-08-17 27 views
-2

* sqlx.DBを割り当てることはできません、それは言う:main.goでGolangがエラーを構築:私は私のプロジェクトを構築しようとした際に* sql.DB

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

マイ輸入:

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

パッケージディレクトリ内から 'go build'または' go install'を使っているだけなので、相対パスはおそらくうまく動作します。 goツールがあなたのパッケージを名前で参照する必要があるとき、これは壊れます。タイプがインポートパスで正規化されているので、パッケージ間でタイプを共有する必要があるので、 '。/ config'の' T'は '../config'の' T'タイプとは異なるタイプです。 – JimB

答えて

1

sqlx.Open戻り値sqlx.DB 内のDB構造体定義とは異なるstruct(hereの定義)を返します。
Connのタイプをsqlx.DBに変更しても問題ありません。

関連する問題