【问题标题】:Function handler GoLang using Standard Library使用标准库的函数处理程序 GoLang
【发布时间】:2020-02-01 04:54:53
【问题描述】:

我有一个类似events/{id} 的端点和一个处理程序。我如何在不使用 Gorilla/Mux 的情况下获得 {id}。可以实现这一目标的 GoLang 内置替代方案有哪些?需要在没有 gorilla/Mux 或其他第三方库的情况下执行此操作。我知道这可以用 mux.Vars 完成,但不能在这里使用。

【问题讨论】:

  • id := strings.TrimPrefix(req.URL.Path, "/events/")

标签: go gorilla mux url-parsing


【解决方案1】:

如果您已经设法将流量引导到您的处理程序,那么您可以简单地自己解析 URL 路径:

func HandlerFunc(w http.ResponseWriter, request *http.Request) {
    segments := strings.Split(request.URL.Path, "/")
    // If path is /events/id, then segments[2] will have the id
}

Request.URL.Path 已经对 URL 进行了解码,因此如果您的参数可能包含斜杠,请改用 Request.RequestURIurl.PathUnescape

segments := strings.Split(r.RequestURI, "/")
for i := range segments {
    var err error
    segments[i], err = url.PathUnescape(segments[i])
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }
}

【讨论】:

    【解决方案2】:

    你可以得到/events/之后开始的字符串切片:

    func eventHandler(w http.ResponseWriter, r *http.Request) {
        id := r.URL.Path[len("/events/"):]
        w.Write([]byte("The ID is " + id))
    }
    
    func main() {
        http.HandleFunc("/events/", eventHandler)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-21
      • 1970-01-01
      • 2016-04-10
      • 2022-10-07
      • 2017-04-20
      • 2015-01-01
      相关资源
      最近更新 更多