从另一个文件调用函数失败

时间:2018-06-21 19:44:54

标签: go

我有一个文件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",
            },
        )
    })
}

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()
}

我尝试使用* .go运行它们,然后运行main.go route.go,但由于某种原因,我仍然遇到运行时错误。我在这里做错了什么?

这是完整的错误:

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

1 个答案:

答案 0 :(得分:0)

与从另一个文件调用函数无关。问题是这一行:

router := gin.Default()

这将创建一个名为router的新 local 变量,并将其初始化,从而使全局router变量仍未初始化(nil)。因此,当initializeRoutes尝试调用全局routes变量时,它会感到恐慌,因为它试图取消引用nil变量(作为错误状态)。

main中的行更改为:

router = gin.Default()

要初始化全局变量而不是创建新变量,这应该可以解决问题。