普通网友 2018-05-22 03:26
浏览 172
已采纳

调用db.Ping()时发生无限循环

I am attempting to create a basic connection to a database. The problem happens when I try to test the connection with db.Ping(); everything works until I get to this line. The Ping sends the program into an infinite loop (the function call never returns), and I'm not sure how to go about fixing this.

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

}

It seems I can connect to the database fine, as the sql.Open call doesn't return an error, and if I called the Ping outside of the http server handle function, it also returns just fine.

Any help would be greatly appreciated!

  • 写回答

1条回答 默认 最新

  • douwei1950 2018-05-22 03:42
    关注

    Your database configurations are wrong. It's pointing to the Golang server port 8080. It should point to the pgsql port(default 5432)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 WPF RichTextBox格式化大量文本卡顿如何解决
  • ¥15 什么设备可以研究OFDM的60GHz毫米波信道模型
  • ¥15 不知道是该怎么引用多个函数片段
  • ¥15 pip install后修改模块路径,import失败,需要在哪里修改环境变量?
  • ¥15 爬取1-112页所有帖子的标题但是12页后要登录后才能 我使用selenium模拟登录 账号密码输入后 会报错 不知道怎么弄了
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型