Go 如何扩展现有结构?
我想扩展Go 如何扩展现有结构?,go,Go,我想扩展http.Request结构,以包含url中存在的参数。我知道有像gorilla这样的优秀库已经做到了这一点,但我想了解它是如何做到的 下面是我尝试做的一个例子: // server.go func Vars(r *http.Request) map[string]string { var args map[string]string args = make(map[string]string) s := r.URL.Path.split('/')[1:]
http.Request
结构,以包含url中存在的参数。我知道有像gorilla这样的优秀库已经做到了这一点,但我想了解它是如何做到的
下面是我尝试做的一个例子:
// server.go
func Vars(r *http.Request) map[string]string {
var args map[string]string
args = make(map[string]string)
s := r.URL.Path.split('/')[1:]
for str := range s {
_, arg, _ := regexp.MatchString("\{\w+\}", str)
append(args, arg)
}
return args
}
httpMock.HandleFunc("/myurl/{arg1}/", MyHandler)
func MyHandler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Success! " + r.Vars()["arg1"]))
}
但我得到一个索引超出范围的异常。有人能帮我弄清楚怎么做吗?一个好的起点是开始
w.Write([]字节(“成功!”+r.Vars()[“arg1]”))
,这样您就可以检查Vars()
的返回值。我必须对此进行验证,但可能存在一个语言规则,该规则要求类型的方法与类型定义在同一个包中,在这种情况下,您需要创建自己的请求类型,该请求类型嵌入http.Request
类型。如果您可以使用返回值Vars()
进行更新,我可能能够提供完整的答案。哪一行引发索引越界错误?请使用slice而不是array。我只是觉得这样会更好。这条线。s:=r.URL.Path.split('/')[1:]并且如果没有参数出现。(外汇:索引页)您得到一个错误。1.1中没有任何对象。好吧,说到扩展,它只是简单的o`adapter设计模式。欲了解更多信息: