goroutesurl-mapping

Go url parameters mapping


Is there a native way for inplace url parameters in native Go?

For Example, if I have a URL: http://localhost:8080/blob/123/test I want to use this URL as /blob/{id}/test.

This is not a question about finding go libraries. I am starting with the basic question, does go itself provide a basic facility to do this natively.


Solution

  • There is no built in simple way to do this, however, it is not hard to do.

    This is how I do it, without adding a particular library. It is placed in a function so that you can invoke a simple getCode() function within your request handler.

    Basically you just split the r.URL.Path into parts, and then analyse the parts.

    // Extract a code from a URL. Return the default code if code
    // is missing or code is not a valid number.
    func getCode(r *http.Request, defaultCode int) (int, string) {
            p := strings.Split(r.URL.Path, "/")
            if len(p) == 1 {
                    return defaultCode, p[0]
            } else if len(p) > 1 {
                    code, err := strconv.Atoi(p[0])
                    if err == nil {
                            return code, p[1]
                    } else {
                            return defaultCode, p[1]
                    }
            } else {
                    return defaultCode, ""
            }
    }