Heim >Backend-Entwicklung >Golang >Warum mux.Vars() eine leere Karte zurückgibt

Warum mux.Vars() eine leere Karte zurückgibt

WBOY
WBOYnach vorne
2024-02-09 16:09:091280Durchsuche

为什么 mux.Vars() 返回空映射

PHP-Editor Youzi ist hier, um eine häufig gestellte Frage zu beantworten: Warum wird eine leere Map zurückgegeben, wenn die Methode mux.Vars() verwendet wird? Dieses Problem kann während des Entwicklungsprozesses auftreten, normalerweise aufgrund von Konfigurations- oder Verwendungsproblemen. In diesem Artikel werden wir die möglichen Ursachen im Detail besprechen und Lösungen anbieten, die Entwicklern helfen, dieses Problem schnell zu lösen. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich erhalte eine leere Karte[] von mux.vars[].

Nachdem ich das Problem verfolgt habe, scheint es, dass ein leeres map[]durch mehrere meiner Dateien läuft.

In derselben Datei: Ich habe eine andere Datei als Modul (glaube ich) in import

importiert
package main

import(
"github.com/ny0ttt/go-bookstore/pkg/controllers"
//note that this is imported from powershell, go mod init "github.com/ny0ttt/go-bookstore"
)

Nachdem ich gelaufen bin go run main.go habe ich die Karte[] als Karte[id]

erhalten

In verschiedenen Dateien:

Nach dem gleichen Import wie beim vorherigen erhalte ich eine leere map[]

Das ist meine Dateistruktur

go-test/cmd/main/main.exe
go-test/cmd/main/main.go
go-test/pkg/config/app.go
go-test/pkg/models/models.go
go-test/pkg/controllers/book-controller.go
go-test/pkg/utils/utils.go
go-test/go.sum
go-test/go.mod

Meine Mod-Datei enthält

module github.com/ny0ttt/go-bookstore

go 1.20

require (
    github.com/go-sql-driver/mysql v1.5.0
    github.com/gorilla/mux v1.8.0
    github.com/jinzhu/gorm v1.9.16
)

require github.com/jinzhu/inflection v1.0.0 // indirect

Das ist mein Code:

In meinem Controller

func getbookbyid(w http.responsewriter, r *http.request){
    vars := mux.vars(r)
    bookid := vars["id"]
    id, err := strconv.parseint(bookid, 0, 0)
    if err != nil{
        fmt.println("error while parsing")
        fmt.println(r)
        fmt.println(bookid)
        fmt.println(vars)
    }
    bookdetails, _ := models.getbookbyid(id) //mthis model returns 2 variable but we will be using only one of them. refer models
    res, _ := json.marshal(bookdetails)
    w.header().set("content-type","pkglication/json")
    w.writeheader(http.statusok)
    w.write(res)
}

Auf meiner Route

func main() {
    r := mux.newrouter()
    
    //routes.registerbookstoreroutes(r)
    r.handlefunc("/book/", controllers.getbook).methods("get")
    r.handlefunc("/book/", controllers.createbook).methods("post")
    r.handlefunc("/book/{id}", controllers.getbookbyid).methods("get")
    r.handlefunc("/book/{bookid}", controllers.updatebook).methods("put")
    r.handlefunc("/book/{bookid}", controllers.deletebook).methods("delete")
        http.handle("/", r)
    log.fatal(http.listenandserve(":2222", r)) // creating a server
}

Ausgabe

error while parsing
&{GET /book/1 HTTP/1.1 1 1 map[Accept:[*/*] Accept-Encoding:[gzip, deflate, br] Connection:[keep-alive] Postman-Token:[a28eebe1-b6d4-4aff-89ed-d3b93a4ed1df] User-Agent:[PostmanRuntime/7.32.3]] {} <nil> 0 [] false :2222 map[] map[] <nil> map[] 127.0.0.1:52035 /book/1 <nil> <nil> <nil> 0xc000282a20}

map[]

Hinweis: Ich drucke die Werte aus, damit ich nachverfolgen kann, wo ich einen Fehler gemacht habe. *http.request Keine Werte zugeordnet? Ich bin mir nicht sicher, wie die Map[] aussehen soll, die http.request zurückgibt.

Ich habe nach Lösungen gesucht, aber anscheinend brauche ich weitere Erklärungen zu diesen Alternativen. Ich habe nachgeschlagen r.url.query, aber das Problem, mit dem sie konfrontiert waren, war die Verwendung unterschiedlicher Routing-Strukturen.

Ich habe auch nach einer anderen Alternative mit „mux.routematch“ gesucht, aber ich dachte, ich könnte eine Erklärung gebrauchen.

Lösung

Problem gelöst

Ich habe gerade mein Projekt auf den Desktop verschoben (ich bin sicher, Sie können es an einen beliebigen Ort verschieben, solange Sie keine Administratorrechte benötigen, um auf das Verzeichnis zuzugreifen) und es funktioniert.

Von nun an werde ich weiterhin Projekte im zugänglichen Verzeichnis erkunden. Danke.

Das obige ist der detaillierte Inhalt vonWarum mux.Vars() eine leere Karte zurückgibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen