2 回答
TA贡献1856条经验 获得超5个赞
您在这里进行了一些错误的假设 - 主要是项目源代码或目录结构在运行时以任何方式相关。他们不是。
Go 程序编译为单个二进制文件,可以在任何地方执行,无需源代码,无需安装 Go - 只需二进制文件。您需要考虑到项目中任何时候在运行时需要的任何类型的文件:
您需要决定如何定位这些文件:
您可以指定一个路径,可以是执行时相对于 CWD 的路径,也可以是绝对路径(但您不应该这样做)
您可以通过 CLI、环境变量、配置文件等接受路径作为运行时参数。
您可以使用许多可用的软件包之一将它们嵌入到二进制文件中(说真的 - 如此之多,以至于 Google 搜索
go embed static files
不仅会出现几个库,而且会出现几篇比较各种库的文章)您需要决定如何打包整个事情:
您可以将任何资源与二进制文件一起压缩/tar/
您可以将所有资源和二进制文件一起压缩/压缩/压缩
如上所述,您可以将它们作为单个文件嵌入到二进制文件中
对于如何处理这个问题,您必须做出一些选择,但关键的一点是不要假设源代码中的路径在运行时完全相关。至少参数化资源的根路径,以便您的代码无论在哪里都能工作,然后您的测试可以传入适当的路径以用于测试。
TA贡献1998条经验 获得超6个赞
您可以使用os.Getwd()来获取根工作目录的路径。然后,将路径的其余部分连接到模板目录。在你的情况下:
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
t, err := template.ParseFiles(wd + "/package1/tmpl/template.tmpl")
- 2 回答
- 0 关注
- 105 浏览
添加回答
举报