我继续得到这个问题,我不明白为什么 包装模型
import (
"database/sql"
"fmt"
_ "github.com/lib/pq"
)
const (
host = "localhost"
port = 5432
user = "postgres"
password = "postgres"
dbname = "postgres"
)
var db *sql.DB
func InitDB() {
psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",
host, port, user, password, dbname)
db, err := sql.Open("postgres", psqlInfo)
if err != nil {
panic(err)
}
defer db.Close()
err = db.Ping()
if err != nil {
panic(err)
}
fmt.Println("Successfully connected!")
}
道歉,因为我是新手,并试图去理解它。感谢您的任何帮助。我试图拉动库以及移动它
答案 0 :(得分:0)
假设您指的是
import (
_ "github.com/lib/pq"
)
这是导入副作用。下划线处于别名位置。这允许您规避未使用的导入的错误(或使用goimports
之类的内容时自动删除)。
导入github.com/lib/pq
时,它会运行一个注册postgres数据库驱动程序的init()
函数。
这个初始化函数可以在https://github.com/lib/pq/blob/d34b9ff171c21ad295489235aec8b6626023cd04/conn.go#L48-L50
看到func init() {
sql.Register("postgres", &Driver{})
}
如果您需要在pq包中引用某些内容,可以删除下划线,然后直接引用该包。但是,请确保您不会无意中完全删除导入,否则您尝试打开与postgres数据库的连接将失败。