非标准导入github.com/lib/pq"在statdard包中

时间:2018-06-08 03:11:18

标签: postgresql go e

我继续得到这个问题,我不明白为什么      包装模型

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!")
  }

道歉,因为我是新手,并试图去理解它。感谢您的任何帮助。我试图拉动库以及移动它

1 个答案:

答案 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数据库的连接将失败。