Бесконечный цикл при вызове db.Ping () - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь создать базовое соединение с базой данных.Проблема возникает, когда я пытаюсь проверить соединение с 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, он также нормально вернулся.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 22 мая 2018

Ваши настройки базы данных неверны.Он указывает на порт сервера Golang 8080.Он должен указывать на порт pgsql (по умолчанию 5432)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...