在Go中合并独立的Web应用程序和GAME

时间:2011-09-25 11:36:06

标签: google-app-engine go

我正在开发一个用Go语言编写的非常简单的Web应用程序。 我有一个独立版本,现在将它移植到GAE。似乎有非常小的变化,主要涉及数据存储API(在我需要的独立版本文件中)。 我还需要包含appengine包并使用init()而不是main()。

有两种版本合并的简单方法吗?由于Go中没有预处理器,似乎我必须为独立版本编写GAE兼容的API,并将此模拟模块用于独立构建,并使用真实API用于GAE版本。但这听起来对我来说太过分了。

另一个问题是GAE可能正在使用较旧的Go版本(例如,现在最近的Go版本使用新的模板包,但GAE使用较旧的模板包,并且它们不兼容)。那么,在构建时或运行时处理这些差异是否有任何变化?

谢谢, 哔叽

UPD:现在GAE使用相同的Go版本(r60),作为稳定的独立编译器,所以抽象级别现在非常简单。

2 个答案:

答案 0 :(得分:3)

从广义上讲,使用抽象。提供持久性接口,并为其编写两个实现,一个基于数据存储,另一个基于本地文件。然后,为每个平台编写一个单独的main / init模块,该模块实例化相应的持久性接口,并将其传递给主应用程序以供使用。

答案 1 :(得分:1)

我的直接答案是(如果你想保持GAE和非GAE版本)你使用一个可靠的VCS,它擅长合并(可能是git或hg),并为每个版本维护单独的分支。 GAE API与Go非常吻合,所以不应该有太多的变化。

至于不同版本的问题,您应该在GAE版本中维护代码并使用gofix(不幸的是单向)来制作与发布兼容的版本。唯一可能导致问题的地方是使用template包,该包正在被弃用;如有必要,您可以在GAE包中添加新的template包。

如果你最终得到了不想在Google服务器上运行的GAE代码,你也可以查看AppScale