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

标签 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 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/

相关文章:

go - 在 Golang 中通过模板解析自定义变量

go - 我如何处理以 Go 中的某个 url 开头的任何 url?

html - xml.NewDecoder(resp.Body).Decode给出EOF错误_GOLang

javascript - 禁用按钮调用服务器然后重新启用按钮

validation - Kubernetes client-go 库是否包含用于验证 json/yaml 文件的功能?

go - Guava Multimaps.index 等同于 golang?

go - 如何从另一个函数调用 dbmap.Insert(interface{})?

go - 如何初始化特定的结构格式

go - 如何使用监听服务实现发布/订阅Google

postgresql - 连接 : connection timed out