我正在尝试使用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>`
答案 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操作付费。即便如此,它也是一个与内联相同的黑客。