如何在 Go 应用程序中可靠地引用静态文件?



我正在编写一个基于模板生成一些文件的Go命令行工具。

模板与命令行工具本身的代码一起位于 Git 存储库中。

我想允许以下内容:

  1. 无论从何处调用二进制文件,都应始终找到模板目录。
  2. 如果需要,用户可以覆盖模板目录。

由于这是一个 Go 应用程序,我使用了类似的东西:

templateRoot := filepath.Join(
os.Getenv("GOPATH"),
"src/github.com/myuser/myproject/templates",
)

但是作为Go的新手,我想知道这种方法是否足够可靠:是否可以保证我的应用程序模板始终可以在该路径上访问?

如果有人将我的应用程序供应商化到他们自己的项目中怎么办?这对命令行工具有意义吗?

由于 2.,我显然不能/不会使用 go-bindata,因为我想在需要时允许覆盖模板。

总结:在 Go 命令行工具中可靠地引用非 go 静态文件的好策略是什么?

GOPATH

用于构建应用程序。虽然您可以在运行时查找GOPATH并检查每个GOPATH条目的相对位置,但您无法确定它是否存在(当然,除非您将其作为运行应用程序的先决条件)。

go get本身就方便了开发人员获取和构建 go 包。它依赖于有一个GOPATH(尽管现在在go1.8中有一个默认值),并且GOBIN在你的PATH中。许多程序需要简单go工具未涵盖的额外步骤,并且具有脚本或生成文件来执行构建。如果您的目标是非开发人员的用户,则需要提供一种安装到标准系统路径的方法。

执行任何常规程序都会执行的操作,并使用一些众所周知的路径来查找模板文件。您当然可以在程序中添加一些逻辑来检查位置层次结构:相对于$GOPATH,相对于二进制文件,工作目录,$HOME等;只需向用户提供程序将查找模板的位置列表即可。

相关内容

  • 没有找到相关文章

最新更新