golang中的http HandleFunc参数

时间:2015-11-21 08:45:04

标签: go httprequest handler

我想使用速率限制或限制器库来限制客户端请求的数量。我在代码库中使用供应商库。我想传入ResponseWriterRequest和从网址检索到的第三个变量。当我使用库进行限制时,它会给我一个只处理两个参数的处理程序。如何将第三个参数传递给处理程序?

这是我目前的代码:

package main

import (
    "fmt"
    "github.com/didip/tollbooth"
    "net/http"
    )

func viewHandler(
    w http.ResponseWriter, 
    r *http.Request, 
    uniqueId string,
    ) {
    //data := getData(uniqueId)
    fmt.Println("Id:", uniqueId)
    p := &objects.ModelApp{LoggedUser: "Ryan Hardy", ViewData: "data"}
    renderTemplate(w, "view", p)
}

//URL validation for basic web services
var validPath = regexp.MustCompile("^/$|/(home|about|view)/(|[a-zA-Z0-9]+)$")

func makeHandler(
    fn func(
        http.ResponseWriter, 
        *http.Request, string,
        )) http.HandlerFunc {
    return func(
        w http.ResponseWriter, 
        r *http.Request,
        ) {
        m := validPath.FindStringSubmatch(r.URL.Path)
        if m == nil {
            http.NotFound(w, r)
            return
        }
        fn(w, r, m[2])
    }
}

func main() {
    http.Handle("/view/", makeHandler(tollbooth.LimitFuncHandler(tollbooth.NewLimiter(1, time.Second), viewHandler)))
    http.ListenAndServe(":8080", nil)
}

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我在手机上,因此可能很难输入,但您可以使用http.Handle功能,该功能采用类似<{1}}的界面

Handler

在我的手机上,所以无法测试,但它应该工作,如果没有,请告诉我。