我正在开发一个用Go语言编写的非常简单的Web应用程序。 我有一个独立版本,现在将它移植到GAE。似乎有非常小的变化,主要涉及数据存储API(在我需要的独立版本文件中)。 我还需要包含appengine包并使用init()而不是main()。
有两种版本合并的简单方法吗?由于Go中没有预处理器,似乎我必须为独立版本编写GAE兼容的API,并将此模拟模块用于独立构建,并使用真实API用于GAE版本。但这听起来对我来说太过分了。
另一个问题是GAE可能正在使用较旧的Go版本(例如,现在最近的Go版本使用新的模板包,但GAE使用较旧的模板包,并且它们不兼容)。那么,在构建时或运行时处理这些差异是否有任何变化?
谢谢, 哔叽
UPD:现在GAE使用相同的Go版本(r60),作为稳定的独立编译器,所以抽象级别现在非常简单。
答案 0 :(得分:3)
从广义上讲,使用抽象。提供持久性接口,并为其编写两个实现,一个基于数据存储,另一个基于本地文件。然后,为每个平台编写一个单独的main / init模块,该模块实例化相应的持久性接口,并将其传递给主应用程序以供使用。
答案 1 :(得分:1)
我的直接答案是(如果你想保持GAE和非GAE版本)你使用一个可靠的VCS,它擅长合并(可能是git或hg),并为每个版本维护单独的分支。 GAE API与Go非常吻合,所以不应该有太多的变化。
至于不同版本的问题,您应该在GAE版本中维护代码并使用gofix
(不幸的是单向)来制作与发布兼容的版本。唯一可能导致问题的地方是使用template
包,该包正在被弃用;如有必要,您可以在GAE包中添加新的template
包。
如果你最终得到了不想在Google服务器上运行的GAE代码,你也可以查看AppScale。