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

我是一位经验丰富的程序员,但还是新手。如果这是一个明显的问题或很好的路径,请提前道歉。我仍然对语言及其语义有所了解。

我正在尝试在 go 中创建一个 Web 服务器

  1. 检查 HTTP 请求

  2. 根据请求的结果,提供特定的静态文件夹

即,简化的伪代码看起来像

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 模块上下文中的处理程序到底是什么?


慕码人8056858
浏览 192回答 1
1回答

DIEA

使用http.FileServer(http.Dir("./static/foo")).ServeHTTP(w, req).//编辑http.FileServer返回一个http.Handler依次提供ServerHTTP方法的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go