我有一个文件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
答案 0 :(得分:0)
与从另一个文件调用函数无关。问题是这一行:
router := gin.Default()
这将创建一个名为router
的新 local 变量,并将其初始化,从而使全局router
变量仍未初始化(nil
)。因此,当initializeRoutes
尝试调用全局routes
变量时,它会感到恐慌,因为它试图取消引用nil
变量(作为错误状态)。
将main
中的行更改为:
router = gin.Default()
要初始化全局变量而不是创建新变量,这应该可以解决问题。