在高朗,我如何提供根目录之外的静电内容,同时仍然有一个用于服务主页的根目录处理程序.
以以下简单的Web服务器为例:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", HomeHandler) // homepage
http.ListenAndServe(":8080", nil)
}
func HomeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "HomeHandler")
}
如果我这么做了
http.Handle("/", http.FileServer(http.Dir("./")))
我收到一个panic 的消息,说我有两个"/"的注册.我在互联网上找到的每个Golang示例都建议从不同的目录中提供静态内容,但这对sitemap之类的东西没有多大帮助.xml,法维康.伊科,机器人.txt和其他文件,按照惯例或强制要求总是从根目录中提供.
我寻找的行为是大多数web服务器(如Apache、Nginx或IIS)中的行为,它首先遍历您的规则,如果未找到任何规则,它将查找实际文件,如果未找到任何文件,它将执行404.我的猜测是,我需要写一个http.Handler
来判断我是否引用了一个带有扩展名的文件,而不是写一个http.HandlerFunc
,如果是,则判断文件是否存在并提供文件,否则它会404或提供主页,请求是"/".不幸的是,我甚至不知道如何开始这样的任务.
我的一部分说,我把情况过度复杂化了,这让我觉得我错过了什么?任何指导都将不胜感激.