第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

地圖中的函數(shù)是 <nil>

地圖中的函數(shù)是 <nil>

Go
哈士奇WWW 2021-09-10 18:08:51
我正在嘗試在 Go 中構(gòu)建一個(gè)簡(jiǎn)單的路由器,我在結(jié)構(gòu)上有一個(gè) get 方法,該方法應(yīng)該將回調(diào)傳遞給以 url 為鍵的 Get 路由映射,它似乎fmt.Println(urlCallback)返回 nil 值并導(dǎo)致運(yùn)行時(shí)恐慌如果我試圖調(diào)用它,來(lái)自 javascript 背景,我只是開始掌握指針之類的東西,并且覺(jué)得它可能與此有關(guān),如果有人能告訴我為什么傳遞的 func 為零,那就太好了.這是我的“路由器”包。package Routerimport (    "fmt"    "net/http"    "net/url"    "log")type Res http.ResponseWritertype Req *http.Requesttype RouteMap map[*url.URL]func(Res, Req) type MethodMap map[string]RouteMaptype Router struct {    Methods MethodMap}func (router *Router) Get(urlString string, callback func(Res, Req)) {    parsedUrl, err := url.Parse(urlString)    if(err != nil) {        panic(err)    }    fmt.Println(parsedUrl)    router.Methods["GET"][parsedUrl] = callback}func (router *Router) initMaps() {    router.Methods = MethodMap{}    router.Methods["GET"] = RouteMap{}}func (router Router) determineHandler(res http.ResponseWriter, req *http.Request) {    fmt.Println(req.URL)    fmt.Println(req.Method)    methodMap := router.Methods[req.Method]    urlCallback := methodMap[req.URL]    fmt.Println(methodMap)    fmt.Println(urlCallback)}func (router Router) Serve(host string, port string) {    fullHost := host + ":" + port    fmt.Println("Router is now serving to:" + fullHost)    http.HandleFunc("/", router.determineHandler)    err := http.ListenAndServe(fullHost, nil)    if err == nil {        fmt.Println("Router is now serving to:" + fullHost)    } else {        fmt.Println("An error occurred")        log.Fatal(err)    }}func NewRouter() Router {    newRouter := Router{}    newRouter.initMaps()    return newRouter}和我的主要。package mainimport (    "./router"    "fmt")func main() {    router := Router.NewRouter()    router.Get("/test", func(Router.Res, Router.Req) {        fmt.Println("In test woohooo!")    })    router.Serve("localhost", "8888")}
查看完整描述

1 回答

?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

您正在使用*URL.url對(duì)象作為映射鍵。由于兩個(gè)不同的對(duì)象不會(huì)相同,因此您無(wú)法再次訪問(wèn)該路徑的密鑰。很恐慌,因?yàn)?/p>


urlCallback := methodMap[req.URL]

不是現(xiàn)有的鍵,因此您訪問(wèn)的是 nil 值。在這種情況下,您可能想要做的是使用對(duì)象的Path屬性URL.url。


所以你會(huì)有:


type RouteMap map[string]func(Res, Req)

在Get():


router.Methods["GET"][parsedUrl.Path] = callback

對(duì)于determineRouter(),您可以這樣做:


urlCallback, exists := methodMap[req.URL.Path]

if exists != false {

    urlCallback(res, req)

}

這會(huì)在嘗試調(diào)用它之前添加一個(gè)檢查以查看該鍵是否存在。


查看完整回答
反對(duì) 回復(fù) 2021-09-10
  • 1 回答
  • 0 關(guān)注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)