为了账号安全,请及时绑定邮箱和手机立即绑定

在进行中,手动调用 http.FileServer 和/或什么是 http 处理程序

在进行中,手动调用 http.FileServer 和/或什么是 http 处理程序

Go
慕码人8056858 2022-01-10 17:01:42
我是一位经验丰富的程序员,但还是新手。如果这是一个明显的问题或很好的路径,请提前道歉。我仍然对语言及其语义有所了解。我正在尝试在 go 中创建一个 Web 服务器检查 HTTP 请求根据请求的结果,提供特定的静态文件夹即,简化的伪代码看起来像import (    "io"    "net/http"    "fmt"    "strings"    "encoding/base64")func examineRequest(request *http.Request) {    //looks at request header    if(request headers have one thing){        return "foo"    }    return "bar"}func processRequest(responseWriter http.ResponseWriter, request *http.Request) {    folderToServe = examineRequest(request);    if folderToServe == "bar" {        //serve static files from the ./static/bar folder        //go freaks out if I try these        //http.Handle("/", http.FileServer(http.Dir("./static/bar")))              //http.FileServer(http.Dir("./static/bar")()    }    else if folderToServer == "foo" {        //serve static files from the ./static/foo folder        //go freaks out if I try these        //http.Handle("/", http.FileServer(http.Dir("./static/foo")))              //http.FileServer(http.Dir("./static/foo")()    }}func main(){    http.HandleFunc("/", processRequest)      //http.Handle("/", http.FileServer(http.Dir("./static")))      }有经验的 Go 程序员可能已经发现了这个问题。我正在 processRequest 中进行检查,因此,调用 Handle 为时已晚——但是,您不能在 go 中为同一路径注册多个句柄,并且嵌套句柄调用异常。我虽然处理程序可能类似于其他语言中的匿名函数并尝试调用它——但 go 也这样做了。那么 - 有没有办法手动调用从调用返回的处理程序http.FileServer(http.Dir("./static"))?这是在这里问的正确问题吗?http 模块上下文中的处理程序到底是什么?
查看完整描述

1 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

使用http.FileServer(http.Dir("./static/foo")).ServeHTTP(w, req).

//编辑

http.FileServer返回一个http.Handler依次提供ServerHTTP方法的。


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信