golang应该把资源保存在哪里

时间:2013-10-25 10:03:35

标签: go

我的应用程序使用json配置文件和其他资源。我应该将它们放在我的项目层次结构中? 我在http://golang.org/doc/code.html(如何编写Go代码)

中找不到答案

UPD: 问题不在于使用应用程序自动分配资源,而是更简单:我应该将资源保存在项目层次结构中的哪个位置?是否有人希望他们有一些标准的地方?

1 个答案:

答案 0 :(得分:10)

目前没有任何单一的正确答案,任何Go工具都没有强制约定。

通常我首先假设我需要的文件位于运行程序的同一目录中。例如,假设conf.json需要myprog.go;然后这两个文件一起存在于同一目录中,它只能运行像

这样的东西
go build -o myprog && ./myprog

部署代码时,myprog二进制文件和conf.json在服务器上共存。运行/管理程序脚本需要cd到该目录,然后运行该程序。

当你拥有大量资源时,这也有效;例如,如果您有一个包含JS,CSS和图像的Web服务器,您只需假设它们与代码中的cwd相关,并将资源目录与服务器二进制文件一起部署。

假设cwd的另一种方法是使用-conf标志,用户可以使用该标志来指定配置文件。我通常使用它来分发需要单个配置文件的命令行工具和开源服务器应用程序。如果需要,您甚至可以使用-assets标志或其他内容指向整个资源文件树。

最后,还有一种方法是没有任何资源文件。 go-bindata是我用于此目的的有用工具 - 它只是将一些数据作为字节编码到Go源文件中。这样它就全都融入了你的二进制文件。我认为当资源数据很少或永远不会改变时,这种方法最有用,并且非常小。 (否则你将围绕巨大的二进制文件运送。)过去我使用go-bindata的一个(有点愚蠢的)例子是将一个favicon烘焙到一个非常简单的服务器中,否则不需要任何服务器除了服务器二进制文件之外的额外文件。