Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa mux.Vars() mengembalikan peta kosong

Mengapa mux.Vars() mengembalikan peta kosong

WBOY
WBOYke hadapan
2024-02-09 16:09:091239semak imbas

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

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!

Kandungan soalan

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.

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam