我正在研究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更合适的标签,请随时添加或让我知道.
我正在为单元测试编写实用程序函数,单元测试在多个包中使用.此实用程序函数必须读取特定文件(始终是同一文件).这里有三个不起作用的解决方案,用于解释我在寻找什么以及为什么.
硬编码绝对路径.这会失败,因为尝试测试项目的另一个用户可能在绝对路径上有不同的前缀.
硬编码定义实用程序功能的文件路径的相对路径.这会失败,因为导入和使用此函数的包不一定与文件层次结构的级别与定义实用程序函数的文件相同,并且相对路径是相对于导入程序解释的,而不是导入的.
传入每个调用者相对于调用者包的文件的相对路径.这实际上有效,但似乎非常冗长,因为现在必须更改每个调用者以传递一个文件.
我看到第四个解决方案,我可以在实用程序函数中硬编码一个相对于顶级包的根目录的路径.但是,我还没有找到一种方法来获取代码中的根目录,虽然我怀疑有一个,因为可以从根解析导入.
那么,我怎么能得到抢手的根目录呢?
我查看了各种Go文档,但迄今为止未能找到解决方案.我也看到了这个问题,但解决方法相当于上面的#3.
让我们假设运行go install -v importpath构建可执行文件并将其安装到其中$GOPATH/bin/program.该go工具无法安装资源文件.当我运行时program,我希望它访问下面的一些资源文件$GOPATH/src/importpath.
从已安装的可执行文件访问此类资源文件的最佳方法是什么?
我正在创建Go命令行应用程序,我需要在当前目录(用户执行命令的目录)中生成一些内容
得到pwd我需要使用的
os.Getwd()
Run Code Online (Sandbox Code Playgroud)
但这给了我一条路
/Users/s05333/go/src/appcmd
Run Code Online (Sandbox Code Playgroud)
我需要这样的道路
/Users/s05333/go/src/
Run Code Online (Sandbox Code Playgroud)
我在这种情况下选择哪个选项?/在Go 之后省略最后一个字符串或者Go中有更好的方法吗?
go ×4