从 Python 转到 Go 语言的五大理由

“ Python 是非常强大的,特别是 Python3 有了异步功能,但是 GO 将完全取代它在大企业中的存在…”如果你真正理解了引号中的话,你可能会去尝试 Go 编程语言。我认为 Go 是很简单的编程语言,并且适应任何的应用环境,甚至比 Javascript 编程还要简单,这可能是 GO 编程语言能在这几年很快流行起来的原因吧。

01 我们在使用 Go 语言编程之前有什么呢?

网站 TreeScale.com 主页和 API 都是基于一些分析工具的网络应用。下面是我们的技术栈:

  • React.js 主页前端
  • Django Python 主页后端和认证服务
  • Node.js API 服务
  • PostgreSQL 数据库、Cassandra 日志系统
  • 自定义容器注册表是使用 Rust 语言

从上面你可以看到基础的框架是完全的基于微服务和逻辑分离的(前后端分离),甚至说是完全不同的技术来实现的。

为什么我们开始整合 API 服务和后端到单个项目中,主要的原因是他们有很多地方是相似的而且通过多种语言或者技术编程,代码存在很多重复的。最终我们需要花费很多时间在个性化的 Django’s API 服务,特别是在定制 JSON 的响应。

一个月之后我们用 Django 建立的 API 服务,我感觉当你开发一些普通的应用使用 Django 是非常棒的,但是当你需要更高的性能和一些个性化的模块的东西的使用 Django 是会越来越复杂的。

02 为什么选择 Go 语言编程?

编译成单一的二进制

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

静态类型系统

对于大规模应用来说类型系统是非常重要的。Python 是很棒的并且有趣的语言但是有些时候你会看到一些不寻常的异常因为当你尝试将变量作为一个整型变量的时候结果它是一个字符串类型.

# Django will crash process because of this def some_view(request): user_id = request.POST.get('id', 0)

Go 在编译的时候告诉你这是一个编译器错误,这就是在愚蠢的问题上赢得时间的地方。

优化

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

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

Go 不再需要 Web 框架

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

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

更好的 IDE 支持和调试

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

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

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

03 结论

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

来源:36大数据

END

投稿和反馈请发邮件至hzzy@hzbook.com。转载大数据公众号文章,请向原文作者申请授权,否则产生的任何版权纠纷与大数据无关。

本文分享自微信公众号 - 大数据(hzdashuju)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构

高并发风控技术解密(下)

22940
来自专栏EAWorld

微服务 to 变 or not to 变?

原著作者介绍: Viktor Farcic CloudBees资深顾问,熟悉多种编程语言,从最早的Pascal,Basic,ASP,C,C++,Perl,Py...

31370
来自专栏韩伟的专栏

GCloud的设计目的

提高游戏服务器端逻辑的开发效率 ? 游戏服务器端有三个常用的典型功能,几乎每个游戏都要反复实现的。而这几个功能,都会符合一些最佳建模和最佳实践: 客户端拉取服...

74560
来自专栏互联网高可用架构

如何设计一款多场景分布式发号器(Vesta)

56630
来自专栏后端技术探索

58同城高性能移动Push推送平台架构演进之路

关于作者:孙玄,58赶集集团系统架构师,技术负责人,技术委员会架构组主任,也是58同城即时通讯、C2C技术负责人,负责58核心系统的架构以及优化工作。分布式系统...

30520
来自专栏Java职业技术分享

巧用分布式环境下的优雅技术,只有头发少的人才研究过

在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。

9900
来自专栏Java架构

高并发风控技术解密(下)

  •从业务中抽象及通用——如果一种业务有可能在今后重复出现,那就将其模块化,系统化(如批处理系统),发展成为平台能力

18950
来自专栏携程技术中心

干货 | Mvvm 前端数据流框架精讲

20920
来自专栏极客猴

高并发的那些事

"高并发"对后台开发同学来说,既熟悉又陌生。熟悉是因为面试和工作经常会提及它。陌生的原由是服务器因高并发导致出现各位问题的情况少之又少。同时,想收获这方面的经验...

65730
来自专栏花叔的专栏

小程序从此可局部营销

最近微信小程序动作频频,二维码长按识别、第三方托管、小程序码、公众号关联不同主体小程序等等,可以看得出微信在努力为小程序导量,楼主今天不谈上诉功能,只谈谈4月...

34940

扫码关注云+社区

领取腾讯云代金券