Editor PHP Youzi berada di sini untuk menjawab soalan biasa: Mengapa peta kosong dikembalikan apabila menggunakan kaedah mux.Vars()? Masalah ini mungkin dihadapi semasa proses pembangunan, biasanya disebabkan oleh beberapa masalah konfigurasi atau penggunaan. Dalam artikel ini, kami akan membincangkan kemungkinan punca secara terperinci dan menyediakan penyelesaian untuk membantu pembangun menyelesaikan masalah ini dengan cepat. Mari lihat!
Saya mendapat peta kosong[] daripada mux.vars[].
Selepas menjejaki isu itu, nampaknya map[]
kosong melalui berbilang fail saya.
Dalam fail yang sama: Saya telah mengimport fail lain sebagai modul (saya percaya) dalam 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" )
Selepas berlari go run main.go
saya mendapat peta[] sebagai map[id]
Dalam fail yang berbeza:
Mengikuti import yang sama seperti yang sebelumnya, saya menerima peta kosong[]
Ini adalah struktur fail saya
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
Fail mod saya mengandungi
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
Ini kod saya:
Dalam pengawal saya
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) }
Dalam laluan saya
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 }
Output
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[]
Nota: Saya mencetak nilai supaya saya dapat menjejaki kesilapan saya, *http.request
Tiada nilai yang dipetakan? Saya tidak pasti bagaimana rupa peta[] yang mengembalikan http.request.
Saya mencari penyelesaian tetapi nampaknya saya memerlukan penjelasan lanjut tentang alternatif ini. Saya mendongak r.url.query
tetapi masalah yang mereka hadapi ialah apabila menggunakan struktur penghalaan yang berbeza.
Saya juga sedang mencari alternatif lain menggunakan `mux.routematch`, tetapi saya fikir saya boleh menggunakan beberapa penjelasan.
Masalah selesai
Saya baru sahaja memindahkan projek saya ke desktop (saya pasti anda boleh mengalihkannya ke mana-mana yang anda mahu, asalkan anda tidak memerlukan hak pentadbir untuk mengakses direktori) dan ia berfungsi.
Mulai sekarang, saya akan terus meneroka projek dalam direktori yang boleh diakses. Terima kasih.
Atas ialah kandungan terperinci Mengapa mux.Vars() mengembalikan peta kosong. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!