1
resposta

[Dúvida] Erro ao rodar o Banco de dados postgres

Quando acesso o localhost:8000 recebo esse erro

adria@DESKTOP-TRS1TON MINGW64 ~/go/src/adriano-go (master)
$ go get github.com/lib/pq

adria@DESKTOP-TRS1TON MINGW64 ~/go/src/adriano-go (master)
$ go run main.go
2024/04/10 15:22:22 http: panic serving [::1]:62946: pq: database "adr_loja" does not exist
goroutine 18 [running]:
net/http.(*conn).serve.func1()
        C:/Program Files/Go/src/net/http/server.go:1898 +0xbe
panic({0xaed700?, 0xc000032470?})
        C:/Program Files/Go/src/runtime/panic.go:770 +0x132
main.index({0xc104d0, 0xc00016c0e0}, 0xc000037b30?)
        C:/Users/adria/go/src/adriano-go/main.go:40 +0x496
net/http.HandlerFunc.ServeHTTP(0xe8f9c0?, {0xc104d0?, 0xc00016c0e0?}, 0xa8f7ba?)
        C:/Program Files/Go/src/net/http/server.go:2166 +0x29
net/http.(*ServeMux).ServeHTTP(0x7c92d9?, {0xc104d0, 0xc00016c0e0}, 0xc00012a7e0)
        C:/Program Files/Go/src/net/http/server.go:2683 +0x1ad
net/http.serverHandler.ServeHTTP({0xc00002d8c0?}, {0xc104d0?, 0xc00016c0e0?}, 0x6?)
        C:/Program Files/Go/src/net/http/server.go:3137 +0x8e
net/http.(*conn).serve(0xc000094000, {0xc10d28, 0xc00002d860})
        C:/Program Files/Go/src/net/http/server.go:2039 +0x5e8
created by net/http.(*Server).Serve in goroutine 1
        C:/Program Files/Go/src/net/http/server.go:3285 +0x4b4
package main

import (
    "database/sql"
    "html/template"
    "net/http"

    _ "github.com/lib/pq"
)

func conectaComBancoDeDados() *sql.DB {
    conexao := "host=localhost user=postgres database=adr_loja password=postgres sslmode=disable"
    db, err := sql.Open("postgres", conexao)
    if err != nil {
        panic(err.Error())
    }
    return db
}

type Produto struct {
    Id         int
    Nome       string
    Descricao  string
    Preco      float64
    Quantidade int
}

var temp = template.Must(template.ParseGlob("templates/*.html"))

func main() {
    http.HandleFunc("/", index)
    http.ListenAndServe(":8000", nil)
}

func index(w http.ResponseWriter, r *http.Request) {
    db := conectaComBancoDeDados()

    selectDeTodosOsProdutos, err := db.Query("select * from produtos")
    if err != nil {
        panic(err.Error())
    }

    p := Produto{}
    produtos := []Produto{}

    for selectDeTodosOsProdutos.Next() {
        var id, quantidade int
        var nome, descricao string
        var preco float64

        err = selectDeTodosOsProdutos.Scan(&id, &nome, &descricao, &preco, &quantidade)
        if err != nil {
            panic(err.Error())
        }

        p.Nome = nome
        p.Descricao = descricao
        p.Preco = preco
        p.Quantidade = quantidade

        produtos = append(produtos, p)
    }

    temp.ExecuteTemplate(w, "Index", produtos)
    defer db.Close()
}
1 resposta

Olá, Adriano! Como vai?

O erro pq: database "adr_loja" does not exist indica que o banco de dados "adr_loja" ao qual você está tentando se conectar não existe.

Se o banco de dados "adr_loja" não existir, você precisará criá-lo. Você pode fazer isso usando o comando CREATE DATABASE adr_loja; no PostgreSQL.

Agora, se o banco de dados "adr_loja" existir, verifique se o nome do banco de dados está correto na string de conexão em seu código Go. No seu caso, a string de conexão é host=localhost user=postgres database=adr_loja password=postgres sslmode=disable. Certifique-se de que o nome do banco de dados é "adr_loja" e não outro nome.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.