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!
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
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]
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.
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!