Calling a function from another file fails

-2

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
go
asked on Stack Overflow Jun 21, 2018 by Tomas • edited Jun 21, 2018 by Tomas

1 Answer

0

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.

answered on Stack Overflow Jun 21, 2018 by Adrian

User contributions licensed under CC BY-SA 3.0