Home >Backend Development >Golang >Why mux.Vars() returns an empty map

Why mux.Vars() returns an empty map

WBOY
WBOYforward
2024-02-09 16:09:091280browse

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

php editor Youzi is here to answer a common question: Why is an empty mapping returned when using the mux.Vars() method? This problem may be encountered during the development process, usually due to some configuration or usage problems. In this article, we will discuss the possible causes in detail and provide solutions to help developers quickly solve this problem. Let’s take a look!

Question content

I get an empty map[] from mux.vars[].

After tracking the issue, it appears that an empty map[] is passed through multiple of my files.

In the same file: I have imported another file as a module (I believe) 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"
)

After running go run main.go, I get the map[] as mapp[id]

In different files:

Following the same import as the previous one, I receive an empty map[]

This is my file structure

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

My mod file contains

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

This is my code:

In my 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)
}

In my 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
}

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[]

NOTE: I print out the values ​​so I can track down what went wrong, *http.request doesn't map any values? I'm not sure what the map[] that returns http.request should look like.

I searched for solutions but it seems I need more explanation of these alternatives. I looked up r.url.query but the problem they face is when using different routing structures.

I'm also looking for another alternative using `mux.routematch`, but I think I could use some explanation.

Solution

Problem solved

I just moved my project to the desktop (I'm sure you can move it anywhere you want, as long as you don't need admin rights to access the directory) and it works.

From now on, I will continue to explore projects in accessible directories. Thanks.

The above is the detailed content of Why mux.Vars() returns an empty map. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete