webpack 应用-20 个有用的 Go 微服务开发框架

2007年,微软的一个团队在监督计算机编程语言时,发现有数百种语言可以用来开发软件,但没有一种语言提供了微软真正需要的功能。 有些语言太低级,有些太复杂,有些功能会妨碍它们。 微软的开发人员想要一种足够简单的语言,可以在几个小时内学会,但又足够复杂,可以处理现代互联网的信息流。

他们的解决方案是 Go,这是一种 C、Java 或 JavaScript 程序员(换句话说,所有程序员)都很容易掌握的语言。 Go 语言提供了足够的功能来组成循环和代码块,但没有一个功能需要很长时间才能掌握。 外部解释器针对从互联网获取和发送数据进行了优化。 其他一切——甚至是完全聪明的想法——都被排除在外。

Go语言对于微服务开发团队来说是一个不错的选择。 虽然你的项目可能不需要像微软那样向全世界提供电子邮件、地图、搜索等云服务,但它可能仍然需要为用户提供数十种不同的大规模信息服务。

微软开源Go语言的决定是明智之举。 该语言催生了数千个开源项目,为您的 Web 项目提供开箱即用的构建块。 以下列出了 20 个最有趣的用于构建基于 Go 的微服务系统的开源项目。 从专注于消息传递、路由、错误处理或 API 的小型工具包,到用于构建 MVC Web 应用程序的更全面的框架,您将发现在 Go 中开发微服务的极其丰富的选择。

贝戈

Beego框架提供了许多标准的附加功能,例如功能齐全的路由器和可用于执行CRUD操作的对象到数据库映射工具。 Bee 是 Beego 爱好者的最爱,它是一个快速而强大的命令行工具,用于构建、更新、打包和部署应用程序。 Bee 可以从模板生成源代码并保持数据库最新。

水牛

Buffalo 团队需要将 Web 应用程序的所有部分组合在一起,包括应用程序本身的一些设计。 他们将许多组成部分称为“生态系统”。 如果您想要路由(很少有人不需要),Buffalo 包括 Gorilla/Mux。 如果需要模板,Buffalo 更喜欢使用 Plush,而不是使用外部 Go 语言模板机制。 Pop,数据库连接模块的集合,可以帮助你将数据库信息转换为Go对象。 您还将找到连接数据库、处理 cookie 和其他任务的标准方法。

眼镜蛇

webpack 应用_webpack官网_全局安装webpack

有时,您所需要的只是命令行界面。 Cobra 提供了 CLI 的所有标准功能,所以为什么要浪费时间实现代码来查找 -h 或 -help 标志。 如果您的微服务需要使用大量标志和其他功能来响应命令行调用,请考虑集成 Cobra。

码头工人

实际上,您可以在办公室服务器机柜中的裸机上运行微服务,但越来越多的人将其代码捆绑在 Docker 容器中,并将容器发送到云端。 较大的包可以更轻松地处理大量不同的代码块,当您的微服务架构愿景要求您创建许多小的、独立的代码块时,这可能是一项有价值的服务。

值得一提的是,Docker 是用 Go 语言开发的,尽管你在部署 Docker 容器时可能从来没有想到这一点。 Docker 社区版是开源的,因此您可以在必要时参与其中,但很可能您只是使用 Docker 作为部署微服务的工具。 Go 语言爱好者之所以要记住 Docker 是用 Go 语言开发的事实,是因为 Docker 的无处不在,有力地表明了他们对这种语言的支持。

回声

Echo 是一个最小的框架,但它提供了许多最重要的组件。 路由器可以对URL进行反汇编,然后将反汇编的部分转换为参数,因此您不需要自己解析它们。 之后,您可以混合身份验证、表单解析、压缩和有效性限制。 您可以专注于从函数返回正确的信息。

错误

有时,API 的用户会传递错误的参数。 您可以自己处理这些参数,也可以将它们创建到 Errors(一个手动执行大部分跟踪的库)中,以便于调试。 当发生错误时,Errors 使用注释来详细说明出错的原因和位置。

杜松子酒

Gin 是 Martini() 的下一代框架。 可以说,Gin 抛弃了这些多余的东西,专注于提供最有用的部分。 花费大量时间构建 Node.js 微服务的开发人员会感到宾至如归。 您可以通过实例化对象并附加函数来处理特定调用来创建微服务。 Gin 处理路由,而您的函数处理业务逻辑。 如果忽略标点符号,它的代码甚至看起来有点像 Node.js 代码。

银杏

测试可能是微服务开发中最具挑战性的事情。 Ginkgo 通过行为驱动测试增强了标准 Go 发行版的开箱即用测试机制。 Ginkgo 提供了一种中间机制来指定函数或服务应产生什么结果。 通常使用 Ginkgo 提供的 Gomega matcher() 来评估结果,但如果您愿意,也可以使用不同的匹配器库。

Ginkgo 是一个综合框架,提供了用于设置测试数据、运行测试以及事后发布测试数据的各种选项。 你只需描述结果,让 Ginkgo 处理剩下的事情。

果阿

如果您以前是使用 Ruby 和 Praxis 框架的开发人员,或者是欣赏设计语言的权威人士,那么您会发现果阿有很多值得喜欢的地方。 您不需要自己编写 Go 代码。 您使用 GoaDSL 来编写 API 的设计规范,然后 Goa 将其转换为可执行的 Go 代码。 DSL 针对微服务 API 进行了优化,并为您的设计强制采用标准架构。

大猩猩

Gorilla 项目提供了一组您需要的模块。 Gorilla 的 Mux() 路由器被许多其他框架使用,因为它非常易于使用。 许多用户使用 Gorilla 是因为 websocket()。

戈蒂菲

同步一组微服务的挑战之一是构建高效的消息传递节点。 Gotify 是一个用于发送和接收消息的简单服务器,它将微服务集合与消息的持久存储相结合。 也许最有用的部分是它的 Web 界面,它可以帮助开发人员处理最棘手的调试问题。

雨果

Hugo 是一个静态站点生成器,您可以使用此框架构建的微服务并不多,但如果您的网站对重复查询的答案有限,那么这是一个值得考虑的选项。 Hugo 生成答案一次,之后可以重复使用。 如果您已经以 HTML 格式提供答案,Hugo 将特别有用。

风筝

如果你想构建一个更加可控的服务组,而不是一般服务之间的交互,可以考虑Kite。 Kite的目标是让微服务之间的通信和协调变得更加容易。 来自 Kite 外部的 API 调用通过 websocket 传入,之后 Kite 使用更快、较低级别的套接字连接(基于 dnode)来传递新消息。 介于两者之间的是一个名为 Kontrol 的服务注册中心和身份验证服务。 如果您需要不断交换消息并协调大量操作,那么在不同服务器之间添加这一层将使一切看起来更快。

洛鲁斯

webpack 应用_全局安装webpack_webpack官网

为了跟踪API的传入和传出数据以及可能的错误,通常需要将日志写入文件。 此过程可以像将一行数据写入打开的文件一样简单,但通常最好使用完整的日志记录框架。 Logrus 提供了一个低级程序来规范您的日志输出并使后续的手动日志文件分析变得更容易。 不要尝试自己开发日志代码,使用 Logrus 这样的库会事半功倍。

纳米

创建微服务并不需要太多,Nano 是极简主义的反例。 它的实际代码不会超过200行,如果算上注释的话也只有400多行。 您只需几行代码即可创建微服务 - 只需处理请求所需的业务逻辑。 该框架还具有其他一些不错的功能,例如独立于语言的 API 结构,以便您的 Go 代码可以与其他语言开发的服务进行交互。 它还提供了一个可以嵌入到本地测试库中的测试程序。 简单,但恰到好处。

内格罗尼

有些人在看完马提尼之后,决定走一条更轻松的路。 他们剥离了路由器和其他一些东西,创建了 Negroni,这是一个非常大的工具,除了处理标准文件、自定义请求、从基本错误中恢复和保存日志之外,没有做更多的事情。 如果您想要额外的东西,您可以自己添加。 Negroni 团队还提供了一系列可以与 Negroni 一起使用的大型项目。

渲染器

当计划输出响应时,您需要获取数据并将其插入到模板中。 Renderer 提供各种输出格式(JSON、JSONP、XML、YAML、HTML、文件)和美观、快速、标准的模板引擎。

陶醉

webpack 应用_webpack官网_全局安装webpack

Revel 借用了 Webpack 的一个简单功能,这使得 Revel 看起来像一个 IDE,或者至少是 IDE 的一部分。 每次您对代码进行更改时,它都会不断重建您的项目。 当您保存更改时,Revel将检查更改,然后编译代码webpack 应用,如果没有编译错误,则启动应用程序。 为此,Revel 服务器手动部署更改后的代码 - 非常适合桌面上的开发,而且显然对于生产部署来说也有点噱头。

该框架本身功能齐全,提供模板、缓存、验证和过滤器。 如果您正在构建大量微服务,它还提供了一个模块系统,可让您在项目之间共享一些 MVC 组件。

作证

使用断言的最简单方法之一是使用 Testify,这是一个 Go 项目,它还提供了用于快速测试小型微服务部分的模拟工具。 只需要几行代码就可以编译出一些基本的测试用例。

收费站

当你发布你的API之后,其实你希望世界各地的人都可以调用它。 但是,当您的服务器崩溃时,或者您考虑为云托管帐户支付的弹性费用时,您可能会改变主意。 Tollbooth 是一个用于限制传入请求的轻量级系统。 限制前门的流量可以减少管道中对微服务或数据库的需求,以保持一切顺利运行。

无框

您只需从头开始编写 Go 代码,无需导出任何依赖项或实例化任何控制对象。 用Go语言创建微服务很容易,因为它外部已经有很多基础代码。 这就是为什么像 Nano 这样的框架只需几百行代码就可以构建出来。

窃听套接字、解压HTTP请求等都是通过标准库完成的。 其实框架提供了一些额外的功能,但是很多时候如果你需要特别基础的微服务webpack 应用,就不需要使用框架。 太多的“附加功能”可能会阻碍你,但 Go 开发人员可能会说太多的依赖项使语言变得更加复杂。

英文原文: