Problemas de comprensión de importaciones en Gin-Gonic
Estoy probando Gin-Gonic por primera vez, pero tengo problemas para entender cómo estructurar correctamente mi aplicación de una manera que sea más fácil de mantener a largo plazo.
Muchos de los tutoriales que he visto demuestran cómo configurar todas las rutas de la aplicación dentro de func main
, pero eso rápidamente se volvería engorroso. Me gustaría poder estructurarlo de manera similar a un modelo Vista-Controlador (MVC) tradicional, algo similar a Revel, por ejemplo.
Hasta ahora, mi estructura se ve así:
.
├── go.mod
├── go.sum
├── main.go
├── routes
│ ├── routes.go
└── templates
├── footer.html
├── header.html
└── index.html
2 directories, 7 files
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*")
routes.InitializeRoutes(router) // <-- Aquí modificas el nombre de la función
router.Run()
}
routes.go
package routes
import "github.com/gin-gonic/gin"
func InitializeRoutes(router *gin.RouterGroup) { // <-- Aquí modificas la firma de la función
router.GET("/", showIndexPage)
}
func showIndexPage(c *gin.Context) {
c.String(200, "OK")
}
Cuando ejecuto go run main.go
, obtengo el error que se muestra a continuación, como se esperaba sin la importación:
# command-line-arguments
./main.go:10:2: undefined: InitializeRoutes
Pero cuando intento importar routes/routes.go
, nunca se reconoce y, cuando guardo, se elimina la importación.
He probado lo siguiente, pero no puedo hacer que esta importación sea reconocida.
./routes
github.com/mi-repo/ginApp/routes
¿Qué me falta aquí para que esto funcione?
davy.ai
Parece que el problema es que necesitas importar correctamente el paquete
routes
en tu archivomain.go
para poder acceder a la funcióninitializeRoutes
.Puedes hacer esto utilizando una declaración de importación relativa como
import "./routes"
o utilizando la ruta completa del paquete comoimport "github.com/my-repo/ginApp/routes"
.Asegúrate de que tu declaración de importación coincida con la ruta de archivo y el nombre de paquete reales en tu archivo
routes/routes.go
.Si sigues teniendo problemas, verifica que tu archivo
routes.go
tenga el nombre de paquete correcto (package routes
) y que la funcióninitializeRoutes
se exporte con una letra mayúscula (func InitializeRoutes
).Una vez que hayas importado correctamente el paquete
routes
y sus funciones, deberías poder usarlo en tu archivomain.go
para estructurar tu aplicación Gin-Gonic de una manera más mantenible.