我查看了mux的源代码,但我只想要一些简单的内容,而不是使用所有功能。
我想在/ url / {id}等网址中获取“id”的值,在req.Form中设置值并像mux一样清理路径。
代码
r:=http.NewServeMux()
r.HandlerFunc("/",func(w http.ResponseWriter,r *http.Request){
// Clean path to canonical form and redirect.
if p := cleanPath(req.URL.Path); p != req.URL.Path {
url := *req.URL
url.Path = p
p = url.String()
//根据HTTP的协议重定向
w.Header().Set("Location", p)
w.WriteHeader(http.StatusMovedPermanently)
return
}
// some code check the url parse id and set to req.form
})
//then add some specific url handlers.
在go doc中,它表示长模式将比短模式具有更高的优先级。
我想在所有处理程序之前运行一些东西(解析id,清理路径等)。
我不想放弃defaultmux的功能。我应该重新定义一条全新的路线,还是使用http.NewServeMux()?如果我使用http.NewServerMux(),我该如何在保留功能的同时添加内容?
答案 0 :(得分:2)
我们在生产堆栈中使用了http://www.gorillatoolkit.org/pkg/mux超过一年,对此非常满意。
对于我主持的一些非常简单的网站,我使用内置路由,如下所示:
package main
import (
"flag"
"fmt"
"net/http"
"os"
)
const (
version = "0.1.0"
)
var (
port uint
)
func init() {
flag.UintVar(&port, "port", 8000, "the port to listen on")
flag.UintVar(&port, "p", 8000, "the port to listen on")
}
func main() {
flag.Parse()
// Retrieve the current working directory.
path, err := os.Getwd()
if err != nil {
panic(err)
}
http.HandleFunc("/gallery/view.aspx", handleGallery)
http.HandleFunc("/gallery/viewLarge.aspx", handleViewLarge)
http.HandleFunc("/ir.ashx", handleImageResize)
http.Handle("/", http.FileServer(http.Dir(path)))
panic(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
}
让我知道你想要的路线是什么,我可以给你一个更具体的例子来说明你想要的东西。