我想使用速率限制或限制器库来限制客户端请求的数量。我在代码库中使用供应商库。我想传入ResponseWriter
,Request
和从网址检索到的第三个变量。当我使用库进行限制时,它会给我一个只处理两个参数的处理程序。如何将第三个参数传递给处理程序?
这是我目前的代码:
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)
}
有人可以帮我吗?
答案 0 :(得分:1)
我在手机上,因此可能很难输入,但您可以使用http.Handle
功能,该功能采用类似<{1}}的界面
Handler
在我的手机上,所以无法测试,但它应该工作,如果没有,请告诉我。