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设计模式。欲了解更多信息: