覆盖Go';s的默认HTTP服务器重定向行为

覆盖Go';s的默认HTTP服务器重定向行为,http,go,Http,Go,Go的默认HTTP服务器实现合并HTTP请求中的斜杠,将HTTP重定向响应返回到“清理”路径: 因此,如果您发出HTTP请求GET/http://foo.com/,服务器响应为永久移动的301。。。位置:/http:/foo.com/ 我想禁用此行为并自己处理所有路径 我是一个新手,似乎我可以创建自己的服务器实例并覆盖处理程序属性,但我不知道如何操作 我想禁用此行为并自己处理所有路径 我是一个新手,似乎我可以创建自己的服务器实例并覆盖Handler属性,但我不知道如何创建 不要通过http.H

Go的默认HTTP服务器实现合并HTTP请求中的斜杠,将HTTP重定向响应返回到“清理”路径:

因此,如果您发出HTTP请求
GET/http://foo.com/
,服务器响应为永久移动的
301。。。位置:/http:/foo.com/

我想禁用此行为并自己处理所有路径

我是一个新手,似乎我可以创建自己的
服务器
实例并覆盖
处理程序
属性,但我不知道如何操作

我想禁用此行为并自己处理所有路径

我是一个新手,似乎我可以创建自己的服务器实例并覆盖Handler属性,但我不知道如何创建

不要通过
http.Handle
http.HandleFunc
方法向
http.DefaultServeMux
注册处理程序,只需调用:

http.ListenAndServe(":8080", MyHandler)
其中,
MyHandler
是实现接口的类型的实例

反过来,这只是一种简单的方法,可实现以下功能:

func ListenAndServe(addr string, handler http.Handler) error {
    server := &http.Server{Addr: addr, Handler: handler}
    return server.ListenAndServe()
}
所以你也可以直接这么做

在处理程序中,您可以按照如下方式解析/路由URI:

func (h *MyHandlerType) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    uri := r.URL.Path
    // ...use uri...
}

哇,这真的很容易-我会花更多的时间阅读接口和类型!以下是我最终得到的实现:@jb。您不需要空结构,闭包就可以了