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

发布于 2024-12-06 06:50:35 字数 435 浏览 1 评论 0原文

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

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

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

谢谢, Serge

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

I'm working on a very simple web app, written in Go language.
I have a standalone version and now port it to GAE. It seems like there is very small changes, mainly concerning datastore API (in the standalone version I need just files).
I also need to include appengine packages and use init() instead of main().

Is there any simple way to merge both versions? As there is no preprocessor in Go, it seems like I must write a GAE-compatible API for the standalone version and use this mock module for standalone build and use real API for GAE version. But it sounds like an overkill to me.

Another problem is that GAE might be using older Go version (e.g. now recent Go release uses new template package, but GAE uses older one, and they are incompatible). So, is there any change to handle such differences at build time or on runtime?

Thanks,
Serge

UPD: Now GAE uses the same Go version (r60), as the stable standalone compiler, so the abstraction level is really simple now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

南风几经秋 2024-12-13 06:50:35

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

In broad terms, use abstraction. Provide interfaces for persistence, and write two implementations for that, one based on the datastore, and one based on local files. Then, write a separate main/init module for each platform, which instantiates the appropriate persistence interface, and passes it to your main application to use.

许仙没带伞 2024-12-13 06:50:35

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

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

如果您最终不想在 Google 服务器上运行 GAE 代码,您还可以查看 应用规模

My immediate answer would be (if you want to maintain both GAE and non-GAE versions) that you use a reliable VCS which is good at merging (probably git or hg), and maintain separate branches for each version. The GAE API fits in reasonably well with Go, so there shouldn't be too many changes.

As for the issue of different versions, you should probably maintain code in the GAE version and use gofix (which is unfortunately one-way) to make a release-compatible version. The only place where this is likely to cause trouble is if you use the template package, which is in the process of being deprecated; if necessary you could include the new template package in your GAE bundle.

If you end up with GAE code which you don't want to run on Google's servers, you can also look into AppScale.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文