Maison >développement back-end >Golang >Impossible de se connecter à la base de données psql
Éditeur PHP Apple rencontre parfois le problème de « impossibilité de se connecter à la base de données psql » lors de l'exécution d'opérations de base de données. Ce message d'erreur apparaît généralement lors de l'utilisation d'une base de données PostgreSQL et peut être dû à un échec de connexion pour des raisons courantes. Il existe de nombreuses façons de résoudre ce problème, notamment vérifier les paramètres de connexion à la base de données, confirmer si la base de données est en cours d'exécution, vérifier la connexion réseau, etc. Dans cet article, nous présenterons quelques solutions courantes pour aider les lecteurs à résoudre rapidement ce problème et à effectuer les opérations de base de données en douceur.
J'essaie de me connecter à la base de données mais j'obtiens une erreur lorsque je fais une requête curl au point final à l'aide de la méthode get
. J'ai vérifié les informations d'identification de l'utilisateur et accordé les droits complets et super-utilisateur.
Voici l'erreur que j'obtiens lors du curling du point final :
santosh@pkg*$:curl -i localhost:8080/books/show http/1.1 303 see other content-type: text/html; charset=utf-8 location: /books date: sat, 19 nov 2022 12:09:52 gmt content-length: 33 <a href="/books">see other</a>.
Une connexion est établie avec la base de données, et lorsqu'une requête est faite à la base de données, ces erreurs se déclenchent :
santosh@pkg*$:go run main.go database connection successful. 2022/11/19 17:39:47 http: panic serving 127.0.0.1:44324: runtime error: invalid memory address or nil pointer dereference goroutine 35 [running]: net/http.(*conn).serve.func1() /usr/local/go/src/net/http/server.go:1850 +0xbf panic({0x6960e0, 0x8e5630}) /usr/local/go/src/runtime/panic.go:890 +0x262 database/sql.(*db).conn(0x0, {0x7593d0, 0xc00011a000}, 0x1) /usr/local/go/src/database/sql/sql.go:1288 +0x53 database/sql.(*db).query(0x6?, {0x7593d0, 0xc00011a000}, {0x6da967, 0x13}, {0x0, 0x0, 0x0}, 0x68?)
Programme principal :
var db *sql.DB type Books struct { Isbn string Title string Author string Price float32 } func init() { var err error args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable") db, err := sql.Open("postgres", args) if err != nil { fmt.Printf("Creating Database %s", err) } if err = db.Ping(); err != nil { panic(err) } fmt.Println("Database connection succussful.") } func main() { http.HandleFunc("/", index) http.HandleFunc("/books", booksIndex) http.ListenAndServe(":8080", nil) } func index(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, "/books", http.StatusSeeOther) } func booksIndex(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { http.Error(w, http.StatusText(405), http.StatusMethodNotAllowed) return } rows, err := db.Query("SELECT * FROM books") if err != nil { http.Error(w, http.StatusText(500), 500) return } defer rows.Close() bks := make([]Books, 0) for rows.Next() { bk := Books{} err := rows.Scan(&bk.Isbn, &bk.Title, &bk.Author, &bk.Price) if err != nil { http.Error(w, http.StatusText(500), 500) return } bks = append(bks, bk) } if err = rows.Err(); err != nil { http.Error(w, http.StatusText(500), 500) return } }
J'ai essayé de vérifier les autorisations des utilisateurs, le format et l'ordre de la base de données. Tout est conforme au code. La connexion est établie mais échoue avec panique lors de l'interrogation de la base de données.
Vous n'avez pas initialisé correctement la variable niveau package db
.
:=
, appelé "variable courte declaration", déclare et initialise une variable new dans sa portée de bloc. Toute variable portant le même nom dans la portée externe sera "cachée".
Pour initialiser correctement les variables au niveau du package, vous pouvez utiliser une simple affectation :
65 litsfd11e6f5Ou vous pouvez utiliser :=
mais utilisez ensuite un nom de variable différent et assurez-vous de l'utiliser pour la mission :
var db *sql.DB func init() { args := fmt.Sprintf("host=%s port=%d dbname=%s user='%s' password=%s sslmode=%s", "localhost", 5432, "bookstore", "santosh", "dts123", "disable") _db, err := sql.Open("postgres", args) if err != nil { fmt.Printf("Creating Database %s", err) } // ... db = _db // set "global" }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!