我是一位经验丰富的程序员,但还是新手。如果这是一个明显的问题或很好的路径,请提前道歉。我仍然对语言及其语义有所了解。
我正在尝试在 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 模块上下文中的处理程序到底是什么?
DIEA
相关分类