1

我正在尝试使用 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>`
4

2 回答 2

2

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

例如:

根.go

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

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

其他.go

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

… ETC。

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

于 2013-10-18T02:48:40.333 回答
1

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

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

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

于 2013-10-16T05:12:23.507 回答