带有动态uri段的Go net/http句柄func

带有动态uri段的Go net/http句柄func,go,Go,如何在Go net/http中使用动态uri段?比如说 http.HandleFunc("/<user_id>/<file_id>", HelloServer) http.HandleFunc(“/”,HelloServer) 只有使用内置的网络/http才能做到这一点?为“/”注册一个处理程序,并在该处理程序中分派动态路径: http.HandleFunc("/", RootServer) 将其他处理程序注册为静态路径作为常规: http.HandleFunc

如何在Go net/http中使用动态uri段?比如说

http.HandleFunc("/<user_id>/<file_id>", HelloServer)
http.HandleFunc(“/”,HelloServer)
只有使用内置的网络/http才能做到这一点?

为“/”注册一个处理程序,并在该处理程序中分派动态路径:

 http.HandleFunc("/", RootServer)
将其他处理程序注册为静态路径作为常规:

 http.HandleFunc("/about", AboutServer)
将所有与其他注册路径不匹配的请求分派给为“/”注册的处理程序。在该处理程序中编写代码,以便在请求路径上分派。下面是一个例子:

func RootServer(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path == "/" {
        IndexServer(w, r) // handle root document on site
    } else if uid, fid, ok := matchUserFile(r.URL.Path), ok {
        UserFileServer(w, r, uid, fid)
    } else {
        http.Error(w, "Not Found", http.StatusNotFound)
    }
}
函数
matchUserFile
如下所示:

func matchUserFile(path string) (uid string, fid string, ok bool) {
    // if path matches the /<user_id>/<file_id> pattern then 
    //    return user id, file id, true
    // else
    //    return "", "", false
}
func matchUserFile(路径字符串)(uid字符串、fid字符串、ok bool){
//如果路径与//模式匹配,则
//返回用户id,文件id,true
//否则
//返回“”,false
}

有许多方法可以编写
matchUserFile
函数。可能有助于实施。

嗯,是的。您完全可以执行任何您想要的路由操作-
net/http
只需将请求传递给处理程序。不过,内置mux不支持这种路由,因此您必须编写自己的路径处理逻辑。请注意,执行
http.HandleFunc(“/”,HelloServer)
没有任何意义,它只是添加了一个不做任何事情的mux。只使用<代码> http。ListenAndServe(“:80”,HeloServer)。这对我这样的新手来说是很混乱的。@ LoboNokeweNgewe有什么更具体的东西让你感到困惑吗?@ LoBooKeWeGeWe如果这是混淆的,那么考虑使用一个支持本地的HTTP路由器。这是我的最爱。这是另一个流行的选择。你可以在谷歌上找到几十个其他的网站。