0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Go代替Python的优点

电子工程师 来源:lp 2019-03-28 14:55 次阅读

我一直在使用Go语言来完成我以前使用Python的许多任务。

举一些例子:

处理存储在S3中的Cloudfront日志

在S3中的存储桶和/或区域之间移动TB级文件

匹配我们的数据库记录和S3之间的文件,确保一切都是同步的。

大多数是一次性任务,这就是脚本语言理想的原因。该程序需要快速编写,然后很可能被丢弃。通常,任务是新的和独特的,因此代码重用是最小的。

使用Go代替Python的优点

编译器很好

我经常在Python中犯下愚蠢的错误。我错误地命名变量或函数,或者传入错误的参数。Devtools可以捕获其中一些,但它们通常需要特殊设置。我从来没有能够轻松配置pylint,而且我不喜欢需要自己配置的完整IDE。

最糟糕的是,如果您输入隐藏在条件逻辑后面的变量。您的脚本可能会在触发错误之前运行几个小时,然后一切都会爆炸,您必须重新启动它。

单元测试可以捕获大部分内容,但是很难获得100%的代码覆盖率,而且我不想花时间为单一脚本编写单元测试。

编译语言会使所有这些问题消失。编译器捕获了你错过的所有愚蠢的东西。因此,我喜欢Go这样的语言超过几百行。

开发速度

拥有编译器的另一面是通常你的开发速度会降低。对于C / C ++和Java来说尤其如此。

Go很简单,我发现开发速度最小。不要误会我的意思,我仍然可以在Python中更快地编写代码,但我可能在Go中实现了85%的Python生产力。

当我考虑到编译器的好处会减少多少错误时,85%也不错。

更好的并行性

您可能知道,Go是从头开始构建的,用于并行执行。

在我的团队中,我们通常需要并行程序,因为我们在S3或数据库中处理大量数据。

如果任务是IO绑定的(很多都是),那么我们就可以成功使用Python线程。但如果它是CPU密集型的,那么Python将因全局解释器锁而受到影响。

我也喜欢在多线程Go中“简单地工作”的简单事情,而不做任何特别的事情。曾经有过这样的问题,你在哪里Ctrl-C你的多线程python并没有做任何事情?

更容易部署

我喜欢有一个二进制文件。我通常在EC2机器上运行代码,使我的脚本更接近S3和我们的数据库。使用Python,我必须确保我需要的所有软件包都安装在远程计算机上,并且我的一个同事没有安装任何冲突的东西。

Virtualenvs解决了大部分问题,但我仍然觉得Go更容易。

通常我会将我的Mac上的代码交叉编译到Linux,将其复制到远程计算机,然后我就开始运行了。我的所有依赖项都包含在我的二进制文件中。

一致的造型。

起初,gofmt工具让我烦恼,特别是他们选择使用制表符而不是空格。我以为这太疯狂了。

但是当我更多地使用它时,我开始依赖它。我开箱即可免费格式化。无论我正在处理什么项目,我的所有代码始终都是一致的,因为格式化是标准Go工具的一个特性。

我必须付出更多努力才能在Python中获得相同的效果。我必须正确配置pylint,然后确保它在每个项目中使用。

更好的工具

Gofmt只是一般主题的一个例子。我喜欢的所有编辑器 - VSCode,vim和Sublime Text都有很好的Golang扩展,可以利用标准的Go工具。

因此,我得到类似于Java的intellisense,但没有使用真正的IDE。我从来没有接近过Python的这种能力。

使用Go代替Python的优点

每当我阅读批评Go的帖子时,通常都是因为缺少明显的特征,比如泛型。我从来没有遇到过丢失泛型的麻烦 - 你会惊讶于你能用地图和切片做多少,但我还有很多其他问题。

Go是固执己见的

首先,Go可能是我用过的最自以为是的语言。从迫使您使用制表符而不是空格(假设您正在使用gofmt),强制您使用某个目录结构,使您在GOPATH环境变量中编写代码,Go的许多功能都不容易更改。

这么容易学习的原因之一是因为你无法改变这些功能。如果你不想导出以大写字母开头的每个名字,那么对你来说太糟糕了。幸运的是,这些都不是我的交易破坏者,但我能理解他们是否适合其他人。相比来说还是Python更灵活。

有点差的库支持

在这个领域比较Python和Go是不公平的。Go是一个更新的,但当我发现Go不支持开箱即用的功能时,我仍然感到困惑。当StackOverflow上的人发布应该是内置函数的代码时,我更加困惑,然后就像每个人将代码复制并粘贴到他们的项目中一样没有问题。

在过去几年中浮现的两个例子:

对切片进行排序(幸运的是,这在Go 1.8中变得更容易)

Math.round只使用整数而不允许你舍入到浮点值(例如,如果你想舍入到最接近的.5)。在Go 1.10之前,甚至没有math.round。

当然,其中一些是因为Go没有泛型,有些是因为Go的开发人员遵循的策略是只向标准库中添加绝对必要的东西。

我理解这两点,但是当你遇到需要自己编码的琐碎功能时,它仍然很烦人。

希望随着语言的不断发展,这些痛点越来越少。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3782

    浏览量

    64333
  • 编译器
    +关注

    关注

    1

    文章

    1622

    浏览量

    49085
  • python
    +关注

    关注

    56

    文章

    4789

    浏览量

    84566

原文标题:再见,Python。你好,Go语言。

文章出处:【微信号:IC-008,微信公众号:半导体那些事儿】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在学习go语言的过程踩过的坑

    作为一个5年的phper,这两年公司和个人都在顺应技术趋势,新项目慢慢从php转向了go语言,从2021年到现在,笔者手上也先后开发了两个go项目。在学习go语言的过程中也学习并总结了一些相关的东西,这篇文章就分享下自己踩过的一
    的头像 发表于 11-11 09:22 141次阅读

    go语言如何解决并发问题

    作为一个后端开发,日常工作中接触最多的两门语言就是PHP和GO了。无可否认,PHP确实是最好的语言(手动狗头哈哈),写起来真的很舒爽,没有任何心智负担,字符串和整型压根就不用区分,开发速度真的是比
    的头像 发表于 10-23 13:38 125次阅读
    <b class='flag-5'>go</b>语言如何解决并发问题

    三十分钟入门基础Go Java小子版

    前言 Go语言定义 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态、强类型、编译型语言。Go 语言
    的头像 发表于 08-12 14:32 705次阅读
    三十分钟入门基础<b class='flag-5'>Go</b> Java小子版

    pytorch和python的关系是什么

    在当今的人工智能领域,Python已经成为了最受欢迎的编程语言之一。Python的易学易用、丰富的库和框架以及强大的社区支持,使其成为了数据科学、机器学习和深度学习等领域的首选语言。而在深度学习领域
    的头像 发表于 08-01 15:27 1816次阅读

    Python建模算法与应用

    Python作为一种功能强大、免费、开源且面向对象的编程语言,在科学计算、数学建模、数据分析等领域展现出了卓越的性能。其简洁的语法、对动态输入的支持以及解释性语言的本质,使得Python在多个平台
    的头像 发表于 07-24 10:41 499次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV-Python
    的头像 发表于 07-16 10:38 1092次阅读

    用pycharm进行python爬虫的步骤

    以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
    的头像 发表于 07-11 10:11 791次阅读

    请问STVP+COSMIC环境下的go to definition怎么用?

    STVP+COSMIC环境下的go to definition怎么用? 我现在go to definition在一个宏定义的时候有效果,但是函数什么的没用,是怎么回事呢,是不是工程里面没有设置好,求大家帮帮忙?
    发表于 05-11 06:11

    关于go中接口类型的表示方法

    go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编译阶段中有明确的变量类型,比如像:int、float32、MyType。
    的头像 发表于 04-28 10:13 355次阅读

    PMG1 PoR复位时POWER_DRILL2GO什么时候进入?

    我有两个关于 PMG1 PoR 的问题。 1.复位时POWER_DRILL2GO什么时候进入? 也许您想在电压低于预设值时强制 EZ-PD™ PMG1-S1 MCU 设备复位
    发表于 03-06 06:03

    Arduino IDE中是否有与Xmc2Go兼容的LoRaWAN库?

    我想问一下 Arduino IDE 中是否有与 Xmc2Go 兼容的 LoRaWAN 库? 我正在尝试使用连接到 Xmc2Go 的 RFM95W Lora 模块通过 LoRaWAN 将数据传输
    发表于 02-27 06:05

    基于Python的地图绘制教程

    本文将介绍通过Python绘制地形图的方法,所需第三方Python相关模块包括 rasterio、geopandas、cartopy 等,可通过 pip 等方式安装。
    的头像 发表于 02-26 09:53 1166次阅读
    基于<b class='flag-5'>Python</b>的地图绘制教程

    如何使用linux下gdb来调试python程序

    如何使用linux下gdb来调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。GDB是一个强大的调试工具,可以帮助开发者诊断和修复程序中的错误。在本文
    的头像 发表于 01-31 10:41 2528次阅读

    MiniProg4在POWER_DRILL2GO周期后失去与PC的连接的原因?

    再次检索它。 发生这种情况时,编程器甚至没有显示在 CYPRESS™ 编程器中,并且插拔编程器也无济于事。 在我的 Python 代码中,我在 POWER_DRILL2GO 循环芯片之前关闭了程序员的端口,尽管我认为这应该无关紧要。我很困惑。 有什么建议可以解决这个问题吗
    发表于 01-19 07:55

    Go配置TM 软件中心用户指南

    电子发烧友网站提供《Go配置TM 软件中心用户指南.pdf》资料免费下载
    发表于 01-03 09:48 0次下载
    <b class='flag-5'>Go</b>配置TM 软件中心用户指南