Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go map中的函数为<;零>;_Go - Fatal编程技术网

Go map中的函数为<;零>;

Go map中的函数为<;零>;,go,Go,我试图在Go中构建一个简单的路由器,我在一个结构上有一个get方法,该方法应该向get路由映射传递一个回调,url作为键,fmt.Println(urlCallback)似乎返回一个nil值,如果我试图调用它,就会引起运行时恐慌,来自javascript背景的我只是开始接触指针之类的东西,我觉得这可能与此有关,如果有人能告诉我为什么传递的func是nil,那就太好了 这是我的“路由器”软件包 还有我的主菜 package main import ( "./router" "fm

我试图在Go中构建一个简单的路由器,我在一个结构上有一个get方法,该方法应该向get路由映射传递一个回调,url作为键,
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)
}

这就增加了一个检查,看看钥匙是否存在,然后再尝试调用它。

这很有道理,你的回答很有魅力。干杯这很有道理,你的回答很有魅力。干杯