我是一位经验丰富的程序员,但还是新手。如果这是一个明显的问题或很好的路径,请提前道歉。我仍然对语言及其语义有所了解。我正在尝试在 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
方法的。
- 1 回答
- 0 关注
- 191 浏览
添加回答
举报
0/150
提交
取消