Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 在Go中合并独立webapp和GAE_Google App Engine_Go - Fatal编程技术网

Google app engine 在Go中合并独立webapp和GAE

Google app engine 在Go中合并独立webapp和GAE,google-app-engine,go,Google App Engine,Go,我正在开发一个非常简单的web应用程序,用Go语言编写。 我有一个独立的版本,现在移植到GAE。似乎有非常小的变化,主要是关于数据存储API(在独立版本中,我只需要文件)。 我还需要包括appengine包,并使用init()而不是main() 有什么简单的方法可以合并两个版本吗?由于Go中没有预处理器,因此我似乎必须为独立版本编写一个与GAE兼容的API,并使用此模拟模块进行独立构建,并为GAE版本使用真实API。但对我来说,这听起来有点过分了 另一个问题是GAE可能使用较旧的Go版本(例如,

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

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

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

谢谢, 哔叽


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

我的直接答案是(如果您想同时维护GAE和非GAE版本),您使用一个可靠的VCS,它擅长合并(可能是git或hg),并为每个版本维护单独的分支。GAE API与Go配合得相当好,因此不应该有太多的更改

至于不同版本的问题,您可能应该在GAE版本中维护代码,并使用
gofix
(不幸的是,这是单向的)来创建与发行版兼容的版本。如果您使用的是
模板
软件包,那么这可能会引起麻烦,因为该软件包正在被弃用;如有必要,您可以将新的
模板
包包含在GAE包中


如果你最终得到了不想在谷歌服务器上运行的GAE代码,你也可以研究一下。

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

我真的认为这不是一个可维护的解决方案。这在很大程度上取决于原始程序的设计方式。值得一提的是,GAE已经提供了一个界面,OP的项目可以模仿它。我不认为它提供了——我认为从长远来看,像这样维护它比进行相当大量的重写要困难得多。是的,AppEngine提供了数据存储接口——但是用文件系统后端实现(甚至是其中的一部分)这个接口要比用多个后端实现一个适合手边应用程序的最小接口多得多。