How to read multiple parameters from a URL

Issue

I have a reverse proxy API that reads the parameters of a localhost API call and then sends those parameters to a 3rd party API.

I’m able to get this working correctly if I only use one parameter. Like so:

http://localhost:8080/path?page=1

I want to be able to use more than one parameter however like so:

http://localhost:8080/path?page=1&param=x

Please see my code below:
This function catches an HTTP request and then sends those parameters to another API.

func (s *Server) getReverseProxy(w http.ResponseWriter, r *http.Request) {
    // when I try to append another query in the list a long with page, I get an error 
    keys, ok := r.URL.Query()["page"]

    if !ok || len(keys[0]) < 1 {
        log.Println("Url Param 'page' is missing")
        return
    }

    // Query()["key"] will return an array of items,
    // we only want the single item.
    key := keys[0]

    log.Println("Url Param 'page' is: " + string(key))
    params := url.Values{
        "page[size]":   []string{"100"},
        "page[number]": []string{""},
    }
    u := &url.URL{
        Scheme:   "https",
        Host:     "url.com",
        Path:     "/path",
        RawQuery: params.Encode(),
    }
}

Without having to refractor, am I missing something simple here? How can I add another parameter for my function to catch?

Solution

The line of code below …

keys, ok := r.URL.Query()["page"]

it returns the param value of page, but in []string type. To retrieve more params, simply add similar statement with different param name. for example:

keysPage, ok := r.URL.Query()["page"]
keysParamA, ok := r.URL.Query()["ParamA"]
keysParamB, ok := r.URL.Query()["ParamB"]
keysParamC, ok := r.URL.Query()["ParamC"]

Or, you can also use the r.URL.Query().Get(key) to return the param value in string type.

page := r.URL.Query().Get("page")
paramA := r.URL.Query().Get("ParamA")
paramB := r.URL.Query().Get("ParamB")
paramC := r.URL.Query().Get("ParamC")

Answered By – novalagung

Answer Checked By – Senaida (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.