我正在研究Go中的一个小型Web应用程序,它旨在用作开发人员计算机上的工具,以帮助调试他们的应用程序/ Web服务.该程序的界面是一个网页,其中不仅包括HTML,还包括一些JavaScript(用于功能),图像和CSS(用于样式).我正计划开源这个应用程序,因此用户应该能够运行Makefile,所有资源都将运行到他们需要的地方.但是,我还希望能够简单地分发尽可能少的文件/依赖项的可执行文件.是否有一种将HTML/CSS/JS与可执行文件捆绑在一起的好方法,因此用户只需要下载并担心一个文件?
现在,在我的应用程序中,提供静态文件看起来有点像这样:
// called via http.ListenAndServe
func switchboard(w http.ResponseWriter, r *http.Request) {
// snipped dynamic routing...
// look for static resource
uri := r.URL.RequestURI()
if fp, err := os.Open("static" + uri); err == nil {
defer fp.Close()
staticHandler(w, r, fp)
return
}
// snipped blackhole route
}
Run Code Online (Sandbox Code Playgroud)
所以它非常简单:如果请求的文件存在于我的静态目录中,则调用处理程序,该处理程序只是打开文件并尝试Content-Type在服务之前设置好.我的想法是,没有理由需要基于真正的文件系统:如果有编译资源,我可以简单地通过请求URI索引它们并按原样提供它们.
如果没有一个好的方法可以做到这一点,或者我试图这样做,我正在咆哮错误的树,请告诉我.我只是觉得最终用户会欣赏尽可能少的文件来管理.
如果有比go更合适的标签,请随时添加或让我知道.
main.go
package main
import (
"net/http"
)
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)
目录结构:
%GOPATH%/src/project_name/main.go
%GOPATH%/src/project_name/static/..files and folders ..
Run Code Online (Sandbox Code Playgroud)
即使在阅读完文档后,我也无法理解http.StripPrefix这里究竟是做什么的.
1)localhost:8080/static如果删除,为什么我无法访问http.StripPrefix?
2)/static如果删除该功能,哪个URL映射到文件夹?