Go:嵌入式后端vs app引擎

时间:2013-06-11 15:19:16

标签: go backend

我是那些过去大部分时间用过.exe和.jar的经典本土程序员之一。从去年开始,我就把自己投入到了能够让我印象深刻的网页框架和技术的世界里。截至过去的一个半月,我已经爱上了Go因为它的严格性,以及它似乎是多么“独立”。所以现在对真正的问题......

  • 转到应用引擎应用,我们为什么需要这个呢?

  • 选择包装应用程序(框架)的区别和原因是什么?

我认为它的目的是将一些通信从应用程序加载到包装器,但遗憾的是我似乎无法弄清楚(通过文档和讨论)这种调制背后的具体目的是什么。

祝你方向最好的问候和网络高五!

2 个答案:

答案 0 :(得分:4)

这些确实是两个不同的问题。

<强> 1。为何选择GAE?

这取决于你。 GAE提供基于云的托管服务,您需要支付租金才能使用。它与亚马逊网络服务有点类似。您的Go应用程序将上传到GAE,在那里它提供您的Web服务,您的用户可以做很多精彩的事情。同时,您无需知道在任何给定时间哪个实际服务器正在进行服务 - 该应用程序可以动态地跨服务器进行迁移。 GAE为您保持服务器的安全性,备份等提供了高正常运行时间和低成本。它还具有弹性以应对负载浪涌。

您可能更愿意租用私人服务器(例如在Rackspace)或仅租用虚拟机。您最好需要成为Linux专家(在Serverfault获得大量帮助)并且您必须自己完成备份,防火墙等。它可能花费(很多)。或者更多。

<强> 2。选择框架?

net / http API允许您编写HTTP服务器代码以完成您想要的任何操作。但你必须做很多艰苦的工作。在相反的极端,像Revel这样的框架使得快速的服务器开发成为可能,只要它能完成你想要的东西。如果你偏离其提供的功能,你可能需要进行大量的挖掘,以找出如何扩展框架。

其他有趣的工具包包括GorillaGocraft WebGoji。就复杂性而言,它们位于Revel和基本net / http之间。

答案 1 :(得分:1)

要回答你的第二个问题,这里有一些使用框架(例如,狂欢)的优点和缺点,而不是像工具箱(例如,大猩猩)那样简单

一般来说,使用框架的优点是:

  • 它提供了许多子包来处理与网页相关的重要子任务,比如模板化,生成指定格式的数据,如json或xml,查询转义等。
  • 它处理样板http处理
  • 它(希望)实施最佳实践,例如转义字符串
  • 它通过以处理请求的方式强制执行一致的设计模式来帮助您管理复杂性

使用框架的缺点:

  • 框架倾向于“自以为是”,这意味着你必须先购买他们的一般哲学并理解他们的核心概念才能使用它们;对于很多框架来说,这可能会带来很多精神上的开销
  • 额外的抽象层,意味着你是从实际发生的事情中删除的另一个步骤,如果出现问题,将有更多的东西需要理解和调试
  • 它可能很脆弱,很难做一些不是框架中标准用例的事情
  • 未来的可维护性:大多数框架都不具有超长的使用寿命。 Django和Rails已经存在了很长时间,但是有一个庞大的框架墓地出现在他们面前。后见之明是20/20,但从一开始就很难选择合适的马。

<强>建议

很难提前打电话。这在很大程度上取决于你的问题的细节,但我会说在Go的情况下,选择更简单的选项。在其他语言中,框架的大部分增值是它们包含处理重要任务的有用子包,但是Go已经在其标准库中包含了很多这些(例如,encoding / json,net / http,net / url,text / template)。我使用Gorilla工具包和go标准库构建了一个fairly sophisticated web app,它的效果非常好,最好的部分是,它非常容易理解代码的作用,我可以向别人解释无需他们首先阅读某些第三方框架的大量关于页面。

如果您想了解其他人如何使用Gorilla,您可以尝试查看real-world usage examples。相比之下,人们如何使用更复杂的框架,并选择你想要的更好。