【问题标题】:Merge standalone webapp and GAE in Go在 Go 中合并独立的 webapp 和 GAE
【发布时间】:2011-11-24 14:32:27
【问题描述】:

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

有什么简单的方法可以合并两个版本吗?由于 Go 中没有预处理器,看来我必须为独立版本编写一个与 GAE 兼容的 API,并将这个模拟模块用于独立构建,并为 GAE 版本使用真实 API。但这对我来说听起来有点矫枉过正。

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

谢谢, 塞尔吉

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

【问题讨论】:

    标签: google-app-engine go


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我的直接答案是(如果您想同时维护 GAE 和非 GAE 版本)您使用​​可靠的 VCS,该 VCS 擅长合并(可能是 git 或 hg),并为每个版本维护单独的分支。 GAE API 非常适合 Go,因此不应该有太多变化。

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

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

      【讨论】:

      • 我真的不认为这是一个可维护的解决方案。
      • 这在很大程度上取决于原始程序的设计方式。值得记住的是,GAE 已经提供了一个接口,可以被 OP 的项目模仿。
      • 我不认为它会 - 从长远来看,我认为像这样维护它比进行相当大量的重写工作要多。是的,App Engine 提供了数据存储接口——但使用文件系统后端实现(甚至是部分实现)它比实现一个适合手头应用程序的最小接口、具有多个后端的工作要多得多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2016-03-08
      • 2020-04-26
      • 2012-04-26
      相关资源
      最近更新 更多