五个从 Python 转到 Go 的理由

file

Python 是非常强大的,特别是 Python3 有了异步功能,但是 GO 将完全取代它在大企业中的存在…

如果你真正理解了引号中的话,你可能会去尝试 Go 编程语言。我认为 Go 是很简单的编程语言,并且适应任何的应用环境,甚至比 Javascript 编程还要简单,这可能是 GO 编程语言能在这几年很快流行起来的原因吧。

在这之前的技术栈?

TreeScale.com 是一个管理后台加上 API 的 Web 应用程序,还有一些数据分析的东西,这里是整个技术栈:

  • React.js 作为控制台的前端;
  • Django Python 作为后端 + 权限认证服务器;
  • Node.js 作为 API 服务器;
  • PostgreSQL 作为数据库,Cassandra 作为日志记录;
  • 自定义的 Rust 语言自定义容器注册器。

正如你说的看到的,整个架构是基于微服务构建的,并且大部分的业务是完全分离的,甚至是完全不同的技术栈。

在我们的 API 服务器和后台服务器中,很多时候我们需要使用不同的语言来实现同一个东西,尤其是因为我们要自定义 JSON 返回数据,所以需要做大量的 Django’s API 定制。

在使用 Django 构建 API 一个月以后,我越发感觉到如果你一般使用 Django 的话,他能很趁手,但是当你对性能和模块化有更高的要求时,事情会变得很复杂。

为什么选择 Go 语言编程?

正如我之前告诉的 Go语言 是我见过和使用过的最简单的语言。 但这只是吸引我的第一个地方。

以下是我们选择 Go 热不是 Python Django 的主要 5 个原因

1编译成单一的二进制

Golang 是编译型语言并且 Googe 的开发者花了很大的功夫在上面。它使用静态链接实际上是基于操作系统类型和环境组合所有的依赖库文件和模块到一个单一的二进制文件中,这也意味着如果你想要编译你的后端应用到你的 Linux 操作系统和 X86 架构的 CPU 中,你只要下载编译好的二进制应用到服务器,然后可以后端应用可以工作了, 这是不需要任何的依赖文件的。

2 静态类型系统

类型系统对于大型项目来说尤其重要。Python 是一个好用并且有趣的语言,但是有时候他的类型系统经常让你感到困惑。

# Django 在这种情况下会奔溃
def some_view(request):
    user_id = request.POST.get('id', 0)
    # 如果你的 POST 请求有一个 "id" 的参数
    # user_id 将会是一个字符串, 
    # 但是你以为他是一个数值类型
    User.objects.get(id=user_id)

Go 在编译时就会报错,在最开始的时候让你避免这种问题。

3 优化!!

令人惊讶的是,在大多数的应用场景中,Go 语言比 Python(版本2或3)更快。 Benchmarking Game 可以看到对比的结果,当然这是不公平的,这依赖于应用类型和用户用例。

对于我们的案例,Go 语言由于自己的多线程模块和 CPU 可伸缩性获得了较好的性能。无论什么时候我们需要执行一些内部的请求,我们可以使用 Goroutine 来分别执行,这个比 Python 中的 Threads 在资源开销上要少上十多倍。由于这些内置的语言特性,我们可以节省大量的资源(内存和 CPU )。

4 Go 不再需要 Web 框架

对于编程语言这是一件十分酷的事情。Go 语言的创造者和社区内置了很多原生的被核心语言支持的工具,在大多数情况下你都不再需要任何第三方类库。比如它有内置的 http、json、html 模板,你甚至可以不用费心去 Github 上寻找第三方类库就可以构建十分复杂的 API 服务。

当然,Go 也有很多类库和框架用来构建 web 项目,但是我会建议你不使用第三方类库来构建你的 web 项目或者 API 服务,因为在大多数情况下使用原生包会使你的生活更加轻松。

5 更好的 IDE 支持和调试

IDE 支持是当你尝试更改编程语言时最重要的考虑因素之一。友好的 IDE 平均可以节省你 80% 的编程时间。 Go Plugin For JetBrains IDEA ,同样提供了其他支持,比如 (Webstorm、PHPStorm 等等…)。这个插件提供了任何你在项目开发中需要的服务,强大的 JetBrains IDEA ,可以让你的开发如虎添翼。

基于我们的代码统计,在用 Go 语言重写项目后我们少写了 64% 的代码。

你不需要调试不存在的代码。代码越少,错误越少!

结论

Go 为我们提供了超强的灵活性,一种语言可以适用于所有的用户场景,而且在所有的用户场景都可以工作的很好。在我们的 Backend 和 API 服务中,我们得到了 30% 的性能优化。而且现在我可以实时处理日志,转换到数据库中,并且通过 Websocket 处理一个或多个服务!这就是 Go 语言特性所提供的的非常强大的功能。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://hackernoon.com/5-reasons-why-we-...

译文地址:https://learnku.com/go/t/23458/five-reas...

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!