初学者问题
我有这个目录结构。
app_executable
html
|
- index.html
data
|
- static_file.json
我无法在static_file.json
中投放data/static_file.json
。
func main() {
// this works and serves html/index.html
html := http.FileServer(http.Dir("html"))
http.Handle("/", html)
// this always 404's
data := http.FileServer(http.Dir("data"))
http.Handle("/data/", data)
fmt.Println("Listening on port " + port + "...")
log.Fatal(http.ListenAndServe(port, nil))
}
感谢任何帮助!
答案 0 :(得分:1)
问题是FileServer处理程序实际上是在这条路径上查找文件:
./data/data/static_file.json
而不是
./data/statif_file.json
如果您使第一个文件存在,您的代码将起作用。您可能想要做的是:
data := http.FileServer(http.Dir("data"))
http.Handle("/", data)
或者
data := http.FileServer(http.Dir("data"))
http.Handle("/data/", http.StripPrefix("/data/", data))
我会选择前者,因为这可能是你真正想做的事情。将处理程序附加到根目录,匹配/ data /的任何内容都将按预期返回。
如果您查看从
调用实际返回的内容data := http.FileServer(http.Dir("data"))
你会看到它是
&http.fileHandler{root:"data"}
说root是在./data,所以请尝试在该根下找到与请求路径匹配的文件。在你的情况下,路径是data / static_file.json,所以最终它会检查不存在的./data/data/static_file.json而且它是404s