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

runtime error: invalid memory address or nil pointer dereference ( NÃO É PROBLEMA DE COMUNICAÇÃO COM BANCO DE DADOS, visto que, a tabela foi criada com sucesso no meu database que está no Docker)

Boa noite estou tendo problema na hora de realizar o POST dentro do postman, ele apresenta erro 500 internal error e no log do terminal ele aparece essa informação runtime error: invalid memory address or nil pointer dereference

O metodo Get ele funciona de boa, aparecendo as informações que declarei na struct na pasta main.go

runtime error: invalid memory address or nil pointer dereference /usr/local/go/src/runtime/panic.go:220 (0x104a235) panicmem: panic(memoryError)

Meu código está idêntico ao do professor visto que, além de acompanhar as aulas, comparei com o repositório que a Alura disponibiliza no GitHub.

Alguém tem alguma ideia de como resolver esse problema, pois ví em outros tópicos pessoal falando que esqueceu de colocar database.ConectaDataBase(), não é o meu caso.

Package controller:

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)
}

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@123 dbname=postgres port=5432 sslmode=disable TimeZone=Asia/Shanghai"
    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()
}

NO POSTMAN eu consigo apenas listar as informações da struct que está na minha package main usando o metodo GET, quando realizo o metódo POST ele aprensenta erro 500.

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