Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

runtime error: invalid memory address or nil pointer dereference

Pessoal estou com um problema relacionado ao curso de Go gin criando uma api com simplicidade, especificamente no Módulo 3 do curso ( Struct, banco de Dados e orm), fiz todo o processo de configuração do Docker compose, consegui logar no pgAdmin, configurar o postgres dentro do PgAdmin do docker, ele criou a tabela de forma automática pelo Gorm, porém na hora de realizar o POST dentro do Postman eu tomo erro 500 e no log no terminal e ele diz. a seguinte mensagem: invalid memory address or nil pointer dereference, mandei o código zipado quem puder ajudar.

Minha package database :

package database

import (
    "log"
    "modulos/models"

    "gorm.io/driver/postgres"
    "gorm.io/gorm"
)

var (
    DB  *gorm.DB
    err error
)

func ConectaDataBase() *gorm.DB {
    StringDeConexao := "host=localhost user=gabriel password=root dbname=postgres port=5432 sslmode=disable"
    DB, err := gorm.Open(postgres.Open(StringDeConexao))
    if err != nil {
        log.Panic("Erro na função conecta Database", err)
    }
    DB.AutoMigrate(&models.Aluno{})

    return DB
}

package Routes:

package routes

import (
    "modulos/controllers"

    "github.com/gin-gonic/gin"
)

func HandleRequests() {
    r := gin.Default()
    r.GET("/alunos", controllers.ExibeTodosAlunos)
    r.GET("/:nome", controllers.Saudacao)
    r.POST("/alunos", controllers.CriaNovoAluno)
    r.Run()
}

E meu controller está assim:

package controllers

import (
    "modulos/database"
    "modulos/models"
    "net/http"

    "github.com/gin-gonic/gin"
)

func ExibeTodosAlunos(c *gin.Context) {
    c.JSON(http.StatusOK, models.Alunos)
}

func Saudacao(c *gin.Context) {
    nome := c.Params.ByName("nome")
    c.JSON(http.StatusOK, gin.H{
        "API diz": "Bem-vindo " + nome + " ao nosso servidor?",
    })
}

func CriaNovoAluno(c *gin.Context) {
    var aluno models.Aluno
    if err := c.ShouldBindJSON(&aluno); err != nil {
        c.JSON(http.StatusBadRequest, gin.H{
            "error": err.Error()})
        return
    }
    database.DB.Create(&aluno)
    c.JSON(http.StatusCreated, aluno)
}
1 resposta
solução!

Pessoal identifiquei já o problema e sanei o mesmo, era relacionado a ao package database, o meu antes estava apresentando erro e em uma das respostas do fórum falaram que tinha que referenciar via ponteiro o *gorm.DB --> na função func ConectaDataBase() *gorm.DB, aí tinha resolvido aparentemente um problema e acarretado em outro, retirei novamente esse ponteiro e o mesmo voltou a funcionar normalmente.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software