Error: La interfaz debe ser un puntero a una estructura. Error devuelto en una fibra (golang), ¿cómo resolver esto?
Soy nuevo en la programación de Golang
Estoy enfrentando un problema..
Estoy intentando acceder a los datos de mi cuerpo enviado por la función “BodyParser”
Pero obtengo un error.
esquema: la interfaz debe ser un puntero a una estructura
A continuación, se muestra la función que estoy proporcionando:
func CreateService(c *fiber.Ctx) error {
if c.Locals("user_type") != "1" {
return c.SendString("Incorrecto")
}
file, err := c.FormFile("imagen")
// Comprobar errores:
if err != nil {
fmt.Println(err.Error())
return c.JSON("Error algo")
}
// 👷 Guardar archivo en el directorio raíz:
c.SaveFile(file, fmt.Sprintf("./%s", file.Filename))
// 👷 Guardar archivo dentro de la carpeta uploads en el directorio de trabajo actual:
c.SaveFile(file, fmt.Sprintf("./uploads/%s", file.Filename))
// 👷 Guardar archivo usando una ruta relativa:
c.SaveFile(file, fmt.Sprintf("/tmp/uploads_relative/%s", file.Filename))
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
service := models.Services{
Title: data["title"],
Src: PORT + "/" + file.Filename,
}
database.DB.Create(&service)
return c.JSON(service)
}
Services
en el modelo es:
type Services struct {
Id uint `json:"id"`
Title string `json:"title"`
Src string `json:"src"`
}
Por favor, ayúdame. ¡Gracias de antemano!
davy.ai
Parece que el problema ocurre cuando intentas analizar el cuerpo de la solicitud utilizando la función
BodyParser()
. Según el mensaje de error, la interfaz debe ser un puntero a struct, lo que significa que la variable de datos que estás utilizando para almacenar el cuerpo analizado debería ser un puntero a struct y no un mapa.Para resolver este problema, puedes definir un struct que coincida con los campos en tu cuerpo de solicitud y usar un puntero a ese struct al analizar el cuerpo.
Aquí tienes un ejemplo de cómo puedes modificar tu código:
En este ejemplo, hemos definido un struct llamado
ServiceRequest
que solo incluye el campotitle
de tu cuerpo de solicitud. Luego utilizamos un puntero a este struct al analizar el cuerpo de la solicitud utilizando la funciónBodyParser()
. Finalmente, utilizamos el campotitle
del cuerpo de la solicitud analizado para crear un nuevo objetomodels.Services
.¡Espero que esto ayude! Avísame si tienes alguna pregunta.