过去一段时间,Go 语言中文网推过挺多 Python 相关的公众号,很多人诧异:为什么推的都是 Python 的呢?其实主要原因是因为 Python 类的公众号实在太多了,而且很多粉丝都特别多,我也挺纳闷的。不过他们值得我学习,也说明 Go 还有很长的路要走。
为了证明 Go 语言中文网坚持做 Go 语言,推广 Go、分享 Go,为 Go 的发展做贡献,这两天会分享两篇 Go 和 Python 的对比文章。欢迎指正。
您会在 Python 和 Go 之间选择哪个?如果您对 Go(Golang)有更深入的了解,那么您肯定会选它。否则将会选择Python。那么我们讨论一下。Python 的伙伴们,有 5 个理由可以让您选择 Go。让我们一起阅读这篇文章。
“ Python非常强大,尤其是 Python 3 具有异步功能,但是 Go 将完全取代它在大型企业中的地位……”
如果您真的理解引号,则可以尝试使用 Go 编程语言。我认为 Go 是一种非常简单的编程语言,可以适应任何应用程序环境,甚至比 Javascript 编程还要简单。这可能就是为什么 Go 编程语言近年来变得流行的原因。
在本文中,我将比较两种语言的以下方面。这些方面的参数将帮助您确定哪种语言更适合您的手头项目。
- 性能
- 可扩展性
- 实际应用
- 执行方式
- 程序库
- 代码可读性
网站 TreeScale.com 主页和 API 是基于某些分析工具的 Web 应用程序。这是他们的技术栈:
- React.js 主页前端
- Django Python 主页后端和身份验证服务
- Node.js API 服务
- PostgreSQL 数据库,Cassandra 日志记录系统
- 自定义容器注册表正在使用 Rust 语言
- Python
Repustate 几乎完全是 Python 商店。他们使用 Django 来实现 API 和网站。因此(当前)使用 Python 来实现阿拉伯情感引擎是合理的,以便保持代码的一致性。仅用于原型设计和实现,Python 是一个不错的选择。它的表达能力非常强大,第三方类库等也很好。如果您要使用 Web 服务,那么 Python 是不错的选择。但是,当您执行低级计算并严重依赖哈希表( Python 中的字典类型)进行比较时,一切都会变慢。我们每秒可以处理大约两到三个阿拉伯文文档,但这太慢了。相比之下,他们的英语情感引擎每秒可以处理大约 500 个文档。
从上面可以看到,基本框架完全基于微服务和逻辑的分离(前端和后端分离),甚至是完全不同的技术来实现。
他们将 API 服务和后端集成到一个项目中的主要原因是它们在许多地方都相似,并且通过多种语言或技术进行编码,同时有很多重复的代码。最后,他们需要花费大量时间来个性化 Django 的 API 服务,尤其是在自定义 JSON 响应方面。
我觉得当您开发一些普通的应用程序时,使用 Django 很棒,但是当您需要更高的性能和一些个性化的模块时,使用 Django 会使它更加复杂。
为什么选择 Go 编程?
1、编译为单个二进制文件
Golang 是一种编译语言,Googe 的开发人员为此付出了很多努力。它使用静态链接根据操作系统类型和环境将所有相关的库文件和模块实际组合到一个二进制文件中,这也意味着如果要将后端应用程序编译到 Linux 操作系统和基于 X86 CPU 的应用程序,您只需将已编译的二进制应用程序下载到服务器,然后后端应用程序就可以工作,不需要任何相关文件。
2、静态类型系统
类型系统对于大规模应用非常重要。Python 是一种很棒的有趣的语言,但是有时您会看到一些奇怪的异常,因为当您尝试将变量用作整数变量时,而实际它是字符串类型。
def some_view (request): user_id = request.POST.get ('id', 0)这样的代码将导致 Django 崩溃。
而 Go 会进行编译,并告诉您这是一个编译器错误,这是它在愚蠢问题上赢得时间的地方。
3、优化(性能)
令人惊讶的是,在大多数应用程序场景中,Go 比 Python(第 2 版或第 3 版)更快。比较的结果可以在基准测试中看到,这当然是不公平的,它取决于应用程序的类型和用户用例。
就我们而言,Go 拥有自己的多线程模块和 CPU 可扩展性,因此性能更高。每当我们需要执行一些内部请求时,我们都可以使用 Goroutine 分别执行它们,这比 Python 中的线程要节省十倍的资源。借助这些内置的语言功能,我们可以节省大量资源(内存和 CPU)。
4、Go 不再需要 Web 框架
对于编程语言来说,这是一件很酷的事情。Go 语言的创建者和社区拥有核心语言支持的许多内置工具,在大多数情况下,您不再需要任何第三方库。例如,它具有内置的 http,json 和 html 模板。您甚至可以构建非常复杂的 API 服务,而不必担心在 Github 上找到第三方库。
当然,Go 也有许多用于构建 Web 项目的库和框架,但是我建议您不要使用第三方库来构建 Web 项目或 API 服务,因为在大多数情况下,使用标准库包将使您的生活更轻松。
5、更好的 IDE 支持和调试
当您尝试更改编程语言时,IDE 支持是最重要的考虑因素之一。友好的 IDE 可以平均节省 80% 的编程时间。Go Plugin for JetBrains IDEA,还提供其他支持,例如(Webstorm,PHPStorm 等)。该插件提供项目开发中所需的任何服务。强大的 JetBrains IDEA 可以使您的开发更加强大,更好用的是 Goland。
选择 Go,还是 go home?
Mozilla 正在内部将其庞大的基础日志记录架构转换为 Go,部分原因是强大的 goroutines 。Go语言是由 Google 的人员设计的,在设计之初,对并发的支持才是重中之重,而不是像其他各种 Python 解决方案一样在其后添加。因此,我们开始从 Python 切换到 Go。
尽管我们的 Go 代码产品尚未正式发布,但结果令人鼓舞。现在,我们每秒可以处理一千个文档,使用更少的内存,并且不需要调试在 Python 中遇到的问题:丑陋的多进程/gevent/“为什么 Control-C 无法杀死进程”。
为什么我们喜欢 Go?
任何对编程语言的工作方式(解释与编译,动态与静态)了解甚少的人都会说:“切,当然 Go 会更快”。是的,我们还可以用 Java 重写所有内容,并且可以看到类似且更快的改进,但这不是 Go 语言获胜的原因。您在 Go 中编写的代码似乎是正确的。我不知道发生了什么,但是一旦代码被编译(快速的编译速度),您就会觉得代码可以正常工作(不仅可以正确运行,而且在逻辑上正确)。我知道这听起来不太可靠,但确实如此。就冗余(或非冗余)而言,这与 Python 非常相似。它以函数为首要目标,因此函数式编程将易于理解。当然,Go 线程和通道使您的工作变得更轻松,可以从静态类型中获得很大的性能提升,并且可以更好地控制内存分配,但是不必为语言表现力付出太多成本。
根据我们的代码统计,用 Go 重写项目后,我们减少了 64% 的代码。
您不需要调试不存在的代码。代码越少,错误越少!
结论
Go 为我们提供了极大的灵活性。一种语言可以在所有用户方案中使用,并且在所有用户方案中都能很好地工作。在后端和 API 服务中,我们获得了 30% 的性能优化。现在,我可以实时处理日志,转换为数据库,并通过 WebSocket 处理一项或多项服务!这是 Go 语言功能提供的非常强大的功能。