0

我正在尝试创建与数据库的基本连接。当我尝试使用db.Ping();测试连接时,就会出现问题。一切正常,直到我到达这条线。将Ping程序发送到无限循环(函数调用永远不会返回),我不知道如何解决这个问题。

package main
import (
    "database/sql"
    "fmt"
    "html/template"
    "net/http"
    _ "github.com/lib/pq"
}
type Page struct {
    Name     string
    DBStatus bool
}
const (
    host     = "localhost"
    port     = 8080
    user     = "username"
    password = "password"
    dbname   = "GoTest"
)
func main() {

    templates := template.Must(template.ParseFiles("templates/index.html"))

    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()

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        p := Page{Name: "Gopher"}

        if name := r.FormValue("name"); name != "" {
            p.Name = name
        }

        p.DBStatus = db.Ping() == nil //this point is reached but never returned

        if err := templates.ExecuteTemplate(w, "index.html", p); err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
        }
    })

    fmt.Println(http.ListenAndServe(":8080", nil))

}

看来我可以很好地连接到数据库,因为sql.Open调用没有返回错误,如果我调用Ping了 http 服务器句柄函数的外部,它也可以正常返回。

任何帮助将不胜感激!

4

1 回答 1

1

您的数据库配置错误。它指向 Golang 服务器端口8080。它应该指向 pgsql 端口(默认 5432)

于 2018-05-22T03:42:32.830 回答