如何通过Postman处理Go lang中的GET操作(CRUD)?

时间:2015-10-21 08:37:07

标签: http go http-get postman

我想执行get操作。我是名称作为URL的资源。 我在Postman中遇到的URL是:localhost:8080/location/{titan rolex}(我在下拉列表中选择了GET方法) 在Postman中点击的URL中,我正在执行GetUser func(),其主体为:

func GetUser(rw http.ResponseWriter, req *http.Request) {

}

现在我想在GetUser方法中获取资源值,即'titan rolex'。 我怎样才能在golang中实现这个目标?

在main()中,我有这个:

http.HandleFunc("/location/{titan rolex}", GetUser)

提前致谢。

1 个答案:

答案 0 :(得分:0)

您正在做的是绑定要由/location/{titan rolex}处理的完整路径GetUser

您真正想要的是绑定/location/<every possible string>以由一个处理程序处理(例如LocationHandler)。

您可以使用标准库或其他路由器执行此操作。我将介绍两种方式:

  1. 标准馆:

    import (
        "fmt"
        "net/http"
        "log"
    )
    
    func locationHandler(w http.ResponseWriter, r *http.Request) {
        name := r.URL.Path[len("/location/"):]
        fmt.Fprintf(w, "Location: %s\n", name)
    }
    
    func main() {
        http.HandleFunc("/location/", locationHandler)
        log.Fatal(http.ListenAndServe(":8080", nil))
    }
    

    但是请注意,更复杂的路径(例如/location/<every possible string>/<some int>/<another string>)将以这种方式实施起来很繁琐。

  2. 另一种方法是使用github.com/julienschmidt/httprouter,特别是如果您经常遇到这些情况(并且路径更复杂)。

    以下是您的用例示例:

    import (
        "fmt"
        "github.com/julienschmidt/httprouter"
        "net/http"
        "log"
    )
    
    func LocationHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        fmt.Fprintf(w, "Location: %s\n", ps.ByName("loc"))
    }
    
    func main() {
        router := httprouter.New()
        router.GET("/location/:loc", LocationHandler)
    
        log.Fatal(http.ListenAndServe(":8080", router))
    }
    

    请注意,httprouter对处理程序使用稍微不同的签名。这是因为,正如您所看到的,它也将这些参数传递给函数。

  3. 哦,还有另一个注意事项,你可以用你的浏览器(或其他东西)点击http://localhost:8080/location/titan rolex - 如果其他东西足够好,它会将URLEncode设为http://localhost:8080/location/titan%20rolex