Go map中的函数为<;零>;
我试图在Go中构建一个简单的路由器,我在一个结构上有一个get方法,该方法应该向get路由映射传递一个回调,url作为键,Go map中的函数为<;零>;,go,Go,我试图在Go中构建一个简单的路由器,我在一个结构上有一个get方法,该方法应该向get路由映射传递一个回调,url作为键,fmt.Println(urlCallback)似乎返回一个nil值,如果我试图调用它,就会引起运行时恐慌,来自javascript背景的我只是开始接触指针之类的东西,我觉得这可能与此有关,如果有人能告诉我为什么传递的func是nil,那就太好了 这是我的“路由器”软件包 还有我的主菜 package main import ( "./router" "fm
fmt.Println(urlCallback)
似乎返回一个nil值,如果我试图调用它,就会引起运行时恐慌,来自javascript背景的我只是开始接触指针之类的东西,我觉得这可能与此有关,如果有人能告诉我为什么传递的func是nil,那就太好了
这是我的“路由器”软件包
还有我的主菜
package main
import (
"./router"
"fmt"
)
func main() {
router := Router.NewRouter()
router.Get("/test", func(Router.Res, Router.Req) {
fmt.Println("In test woohooo!")
})
router.Serve("localhost", "8888")
}
您正在使用
*URL.URL
对象作为地图键。由于两个不同的对象将不相同,因此无法再次访问该路径的密钥。恐慌是因为
urlCallback := methodMap[req.URL]
不是现有的键,因此您正在访问一个nil值。在这种情况下,您可能需要使用URL.URL
对象的Path
属性
所以你会:
type RouteMap map[string]func(Res, Req)
在Get()
中:
对于确定器()
,可以执行以下操作:
urlCallback, exists := methodMap[req.URL.Path]
if exists != false {
urlCallback(res, req)
}
这将添加一个检查,以查看键是否存在,然后再尝试调用它。您正在使用映射键的
*URL.URL
对象。由于两个不同的对象将不相同,因此无法再次访问该路径的密钥。恐慌是因为
urlCallback := methodMap[req.URL]
不是现有的键,因此您正在访问一个nil值。在这种情况下,您可能需要使用URL.URL
对象的Path
属性
所以你会:
type RouteMap map[string]func(Res, Req)
在Get()
中:
对于确定器()
,可以执行以下操作:
urlCallback, exists := methodMap[req.URL.Path]
if exists != false {
urlCallback(res, req)
}
这就增加了一个检查,看看钥匙是否存在,然后再尝试调用它。这很有道理,你的回答很有魅力。干杯这很有道理,你的回答很有魅力。干杯