我有一个文件 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 routes.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
最佳答案
它与从另一个文件调用函数无关。问题是这一行:
router := gin.Default()
这会创建一个名为 router
的新local 变量,并对其进行初始化,而全局 router
变量仍未初始化(nil
)。因此,当 initializeRoutes
尝试调用全局 routes
变量时,它会出现 panic ,因为它试图取消引用 nil
变量(如错误状态)。
将 main
中的行更改为:
router = gin.Default()
初始化全局变量而不是创建新变量,应该可以解决问题。
关于go - 从另一个文件调用函数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50976434/