I am trying to compile my go app but am getting the following error:
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x14d6572]
goroutine 1 [running]: github.com/gin-gonic/gin.(*Engine).Use(0x0, 0xc420201f30, 0x1, 0x1, 0x2, 0x2) /Users/jordan.kasper/go/src/github.com/gin-gonic/gin/gin.go:227 +0x22 gin-sample-app/handlers.InitializeRoutes() /Users/jordan.kasper/go/src/gin-sample-app/handlers/routes.go:15 +0x61 main.main() /Users/jordan.kasper/go/src/gin-sample-app/main.go:25 +0x77
This is my main:
package main
import (
"gin-sample-app/handlers"
"github.com/gin-gonic/gin"
)
var router *gin.Engine
func main() {
// Set Gin to production mode
gin.SetMode(gin.ReleaseMode)
// Set the router as the default one provided by Gin
router = gin.Default()
// Process the templates at the start so that they don't have to be loaded
// from the disk again. This makes serving HTML pages very fast.
router.LoadHTMLGlob("templates/*")
// Initialize the routes
handlers.InitializeRoutes()
// Start serving the application
router.Run()
}
This is my InitializeRoutes:
package handlers
import (
"gin-sample-app/middleware"
"github.com/gin-gonic/gin"
)
// initializing the routes
func InitializeRoutes() {
var router *gin.Engine
// Use the setUserStatus middleware for every route to set a flag
// indicating whether the request was from an authenticated user or not
router.Use(middleware.SetUserStatus())
// Handle the index route
router.GET("/", ShowIndexPage)
// Group user related routes together
userRoutes := router.Group("/u")
{
// Handle the GET requests at /u/login
// Show the login page
// Ensure that the user is not logged in by using the middleware
userRoutes.GET("/login", middleware.EnsureNotLoggedIn(), showLoginPage)
// Handle POST requests at /u/login
// Ensure that the user is not logged in by using the middleware
userRoutes.POST("/login", middleware.EnsureNotLoggedIn(), performLogin)
// Handle GET requests at /u/logout
// Ensure that the user is logged in by using the middleware
userRoutes.GET("/logout", middleware.EnsureLoggedIn(), logout)
// Handle the GET requests at /u/register
// Show the registration page
// Ensure that the user is not logged in by using the middleware
userRoutes.GET("/register", middleware.EnsureNotLoggedIn(), showRegistrationPage)
// Handle POST requests at /u/register
// Ensure that the user is not logged in by using the middleware
userRoutes.POST("/register", middleware.EnsureNotLoggedIn(), register)
}
// Group article related routes together
articleRoutes := router.Group("/article")
{
// Handle GET requests at /article/view/some_article_id
articleRoutes.GET("/view/:article_id", getArticle)
// Handle the GET requests at /article/create
// Show the article creation page
// Ensure that the user is logged in by using the middleware
articleRoutes.GET("/create", middleware.EnsureLoggedIn(), showArticleCreationPage)
// Handle POST requests at /article/create
// Ensure that the user is logged in by using the middleware
articleRoutes.POST("/create", middleware.EnsureLoggedIn(), createArticle)
}
}
I am still pretty new to Go so I am not exactly sure what is going on. However this program originally started with all the files in the same package but I am now trying to separate it. It worked before the split so might be just the way I am calling it?