使用Go管理和包含多个文件的最佳方法是什么?

时间:2013-10-16 05:05:27

标签: google-app-engine import include go

我正在尝试使用Go和Google AppEngine,我希望将多个文件导入或包含在主文件中。

例如,假设我有一个带有多个web url函数的init的文件,例如:

func init() {
    http.HandleFunc("/", root)
    http.HandleFunc("/1", function1)
    http.HandleFunc("/two", function2)
    http.HandleFunc("/3hree", function3)
}

我希望每个函数都在一个单独的文件中(例如,所以其他开发人员可以独立处理它们 - 或者只是为了便于调试时的可读性)。

我不想为每个函数创建单独的包,因为这看起来有点矫枉过正,但我​​认为这可能是唯一的方法。

提出同样问题的另一种方式:

如果你想要一个只有一个模板的单独文件,那么将它拉入go文件的最佳方法是什么(不必让它在线):

const testPage =
`<!DOCTYPE html>
<html>
<body>
    <br>this is a test
</body>
</html>`

2 个答案:

答案 0 :(得分:2)

您的应用程序当然可以由多个文件(以及多个packages)组成。每个文件也可以有自己的init()函数,因此您可以在每个文件中注册处理程序 - 或者将它们集中在一个文件中。

例如:

<强> root.go

package app
…
func init() {
  http.HandleFunc("/root", rootHandler)
}

func rootHandler(w http.ResponseWriter, r *http.Request) {
   …
}

<强> other.go

package app
…
func init() {
   http.HandleFunc("/1", oneHandler)
}

......等等。

最好将模板HTML放在与Go文件一起放在自己的文件中,而不是将其嵌入到字符串中(您也可以将其存储在数据存储区中,但这样做更多一些)。看看SDK中的演示如何做 - mandelbrot用它的map.html文件来做这件事。

答案 1 :(得分:1)

在Google App Engine上,这是不可能的,因为您无法访问Go的文件系统模块。您无法将文件作为文件系统进行访问。相信我。我试过了。 :)

您提到的最佳选择是内联。理论上,您可以将每个模板作为一个包进行分离。但这是相同的概念。

另一种类似黑客的选择是将模板存储在GAE数据存储中。但是,您需要为数据存储IO操作付费。即便如此,它也是一个与内联相同的黑客。

相关问题