golang python_Go vs. Python:如何选择

golang python

在为开发人员提供方便和便利以及加快开发速度方面,两种编程语言脱颖而出: PythonGo 。 如今,Python成为脚本, 开发机器学习和测试的中流 ,柱,而Go正在推动基于容器的,基于 云的本地计算的新潮流。

有时,在Python和Go之间进行选择很明显:选择Python作为其丰富的生态系统,选择Go作为其执行速度。 但是有时候选择不是那么明显。 在本文中,我们将介绍两种语言之间的主要区别,并强调其优缺点,以帮助您为手头的工作选择正确的语言。

[ 同样在InfoWorld上:每个Python开发人员都有24个Python库 ]

Go与Python:开发人员的便利

Python和Go因易于使用而享有盛誉。 两种语言都具有简单明了的语法以及小的易于记忆的功能集。

Python和Go的编辑-编译运行周期都很短。 Python没有编译阶段(需要解释),因此脚本几乎立即执行。 Go可以提前进行编译,但是它的编译阶段比C ++之类的语言要快得多。 Go感觉更像是一种脚本语言,而不是预先编译的语言。

Python使用动态键入功能,使快速原型化应用程序变得更加容易。 用类型标记事物是可选的,可以执行以增强程序的正确性(对于大型项目来说是个好主意),但这从来都不是必需的。 没有类型,较大的代码库可能变得笨拙。

在Go的情况下,键入是严格的,但在大多数情况下很容易推断出来,因此不那么麻烦。 这也意味着更大的代码库更易于开箱即用地进行管理,因为Go程序员遵循了使用类型的传统。 另一方面,Go缺少泛型,因此某些可以在其他语言(包括Python)中更简洁地表达的代码在Go中变得更加冗长和样板。

Go vs. Python:运行时速度

如果Go在某个方面击败了Python,那就是执行速度。 即使在开发人员方面没有任何优化,Go还是比Python高一个数量级或更快。 Go可以直接编译为本地机器代码,而Python的运行时动态性很难针对速度进行优化。

尽管如此,Python可以“足够快”地完成许多常见任务,因此值得针对您的用例对Python实现进行基准测试。 Python所使用的许多性能最密集的作业不是在Python本身中执行,而是通过用C或C ++编写的库执行。 而且, PyPy运行时 (可替代常规CPython运行时 )可以为长期运行的应用程序(如Web服务器)提供显着的加速,即使在使用Python的动态功能的情况下也是如此。

Go与Python:部署

Go从一开始就被设计为允许将已编译的应用程序轻松部署为跨多个平台的独立二进制文件。 相比之下,Python最初被认为是一种脚本语言,因此Python程序需要Python运行时。

Python缺乏将脚本部署为独立可执行文件的本机解决方案,但是您可以为此使用PyInstaller之类的第三方库 。 另外,像Docker这样的容器解决方案使将Python应用程序与其运行时一起打包变得更加容易。

Go与Python:项目管理

从一开始,Go就获得了另一个好处:现代软件项目管理技术。 快速的命令行操作将创建一个新的Go项目存储库并管理其依赖项。 值得注意的是,Go并非一直都对依赖项和可复制的构建提供良好的支持,但是Go 1.11中引入的模块系统现在提供了一种用于处理不同版本库的通用机制。

在某些方面,Python遇到了相反的问题:过多的项目管理和版本控制工具经常导致对于哪种工具和方法最适合给定的工作感到困惑。 从好的方面来说,这也意味着您没有拘束于以特定的方式做事。

Go与Python:异步编程

异步操作(在执行一项任务的同时等待另一项任务完成)可帮助I / O绑定代码(例如网络服务)更有效地运行。

Go从一开始就通过goroutines (一种语言语法功能)原生支持异步。 Goroutine使您可以与本机通信原语channel并排运行许多小的操作,以在它们之间同步操作。 Go还带有工具,以减少对这些功能的误用。 您仍然可以编写陷入僵局或存在争用条件的代码,但是很容易发现此类最常见的错误。

Python最近通过async/await关键字获得了对异步行为的语言级别支持。 在此之前,异步编程在Python中是可能的,但并非一帆风顺。 这意味着库对现代Python异步习惯用语的支持没有达到应有的高级,因为它是该语言的后来者。 但是,随着越来越多的库变得异步兼容并且Python的非异步版本不再受支持,支持正在改善。

Go vs. Python:错误处理和调试

Python和Go在错误处理方面有着截然不同的理念。

在Python中,错误是一流的对象,每当应用程序引发异常时,错误就会在应用程序的调用链中传播。 这使错误处理成为可选操作,因此程序员必须决定要处理的情况并手动处理它们。 同样,Python的方法还使编写更灵活的错误处理机制成为可能,而这种机制不会使每个调用站点混乱。

使用Go,每个函数都会返回函数本身的值以及可能的错误对象。 Go程序通常在函数调用站点上具有关于可能的错误情况的显式注释,因此代码具有明确的错误处理。 缺点是冗长的代码。 Go还具有用于处理极端情况的panic/recover关键字,可以保证彻底杀死程序,尽管它们当然不像Python异常那样被广泛使用。 Go 2.0可能具有减少冗长程度的新错误处理机制,但该语言的修订版还有很长的路要走。

Go与Python:测试

并非所有现代软件开发都依赖于单元测试和集成测试,但是这样做的项目更加健壮。 Go和Python都提供了用于单元测试的本机机制。 对于Go,有本机testing包。 对于Python,有unittest框架。

Go将测试覆盖率指标作为testing一部分; 使用Python,您需要一个第三方包coverage来确定测试套件的完整性。 另一方面,Python具有高度灵活的内置测试选项来补充其动态性-例如,它具有用于检查各种常见条件(包括引发的异常)的断言。 Python还使用类将测试代码与应用程序代码区分开,而Go使用函数和文件命名约定。

Go与Python:生态系统

多年来,Python和Go收集了令人印象深刻的第三方软件库,这些库反映了它们的用例和优势。

长期以来,Python一直是脚本和自动化以及构建Web服务以及在复杂系统之间创建易于使用的界面的首选语言。 最后一类是Python如何在数据科学和机器学习中占据主导地位:Python使将高级数据分析和机器学习模型中使用的大型,复杂的库和工作流粘合在一起变得容易。

Go的成功案例围绕其异步编程功能和系统本机速度。 Web服务器,网络应用程序,绑定CPU的微服务和系统实用程序都是Go的理想选择。 支持现代基于容器的应用程序开发的大多数软件(包括DockerKubernetes)都是用Go编写的。

确定是选择Go还是Python的一种方法是查看其中编写的现有项目与您当前的工作相似。 您尝试构建的大部分内容很有可能已经由其他人构建,因此您不仅可以选择语言,还可以选择适合的支持库。

最后,没有什么说不能用Python Go编写的。 您可以将Go用于应用程序的性能敏感部分,并提供Python包装器或前端,以方便开发人员使用。

翻译自: https://www.infoworld.com/article/3452743/go-vs-python-how-to-choose.html

golang python

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值