1
resposta

Problema para conectar ao Banco de Dados

Eu estou com um erro quando rodo a aplicação e abro o navegador

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

package main

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

    _ "github.com/lib/pq"
)

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

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

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

func main() {
    http.HandleFunc("/", index)
    http.ListenAndServe(":8080", 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

Aparentemente o seu postgres não possui a role postgres. Por favor acese pelo terminal o psql. Ems eguida use o comando \du.

Se tiver a role aparecerá algo conforme abaixo


                             List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}      

Se tiver uma role com nome diferente e com o atributo de superuser utilize era para realizar a conexão

Caso contrário siga os passos abaixo

sudo -u user psql user CREATE USER postgres SUPERUSER;