以下代码中的任何错误?以下代码无法使用多个目录服务。当我访问localhost:9090 / ide时,服务器将返回404错误。
package main
import (
"log"
"net/http"
)
func serveIDE(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir("/home/user/ide")).ServeHTTP(w, r)
}
func serveConsole(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir("/home/user/console")).ServeHTTP(w, r)
}
func main() {
http.HandleFunc("/ide", serveIDE)
http.HandleFunc("/console", serveConsole)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
当我改变这样的代码时,
http.HandleFunc("/", serveIDE)
它会像我预期的那样工作。
答案 0 :(得分:3)
使用http.FileServer
的一个问题是请求路径用于构建文件名,因此如果您从除root之外的任何地方提供服务,则需要将路由前缀去除到该处理程序
标准库包含http.StripPrefix
的有用工具,但仅适用于http.Handler
,而不适用http.HandleFunc
,因此要使用它,您需要调整{{1}转到HandleFunc
。
这是一个应该做你想要的工作版本。请注意,wHandler只是从Handler
方法到HttpFunc
接口的适配器:
Hander