I have a file routes.go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func initializeRoutes() {
router.GET("/", func(c *gin.Context) {
c.HTML(
http.StatusOK,
"index.html",
gin.H{
"title": "Home Page",
},
)
})
}
and main.go
package main
import (
"github.com/gin-gonic/gin"
)
var router *gin.Engine
func main() {
router := gin.Default()
router.LoadHTMLGlob("templates/*")
initializeRoutes()
router.Run()
}
I have tried running them with the *.go and go run main.go routes.go, I still for some reason get a runtime error. what am I doing wrong here?
Here is the full error:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x914518]
goroutine 1 [running]:
main.initializeRoutes()
C:/Users/tomuk/go/src/webapp/routes.go:10 +0x58
main.main()
C:/Users/tomuk/go/src/webapp/main.go:16 +0x51
It has nothing to do with calling a function from another file. The problem is this line:
router := gin.Default()
This creates a new local variable called router
, and intializes it, leaving the global router
variable still uninitialized (nil
). So when initializeRoutes
tries to call the global routes
variable, it panics because it's trying to dereference a nil
variable (as the error states).
Change the line in main
to:
router = gin.Default()
To initialize the global variable instead of creating a new variable, and that should resolve the issue.
User contributions licensed under CC BY-SA 3.0