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

我一直在使用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的开发人员遵循的策略是只向标准库中添加绝对必要的东西。

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

希望随着语言的不断发展,这些痛点越来越少。返回搜狐,查看更多

责任编辑:

python你好代码-再见,Python。你好,Go语言。相关推荐

  1. 你好,再见;你好,幸会!

    做PBOC/EMV的L2认证,有接近七年了.一直就在这个圈子里兜兜转转,有做过终端认证,有做过卡片认证. 偶尔玩玩L3,玩玩PCI,玩玩工具开发,中间库开发. 技术来来去去也就是Linux + C , ...

  2. python爬虫代码-学Python=写爬虫?不用代码也能爬下95%网站的数据!

    你好,这里是BIMBOX,我是老孙. 前些天BOX群里一位小伙伴问我们,现在市面上有一千多块钱的Python网络课程,两个月学完,能入门网络爬虫,大部分网站的数据都可以爬下来,这个学费值不值得? 我们 ...

  3. python常用代码大全-python基础,python基础代码大全

    Python是现在非常流行的编程语百言,也是四大编程语言之一,而且Python具有简单.易学.上手容易.功能强大等优势,非度常适合零基础人员学习,也是问初学者的首要选择. 而对于初学Python入门时 ...

  4. python常用代码大全-Python常用库大全,看看有没有你需要的

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  5. python常用代码大全-Python常用库大全及简要说明

    环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...

  6. python基础代码大全-Python字典及基本操作(超级详细)

    字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关 ...

  7. python基础代码大全-python基础语法,python 代码命令大全

    python: 1.语法强制缩进 2.区分大小写:iLoop与iloop是两个变量 3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用 4. ...

  8. python入门代码大全-python入门代码指南教程书籍推荐2020总结全集汇总

    python入门代码指南教程书籍推荐2020总结全集汇总 记住,如果您想学习Python,市场上有很多可用的资源.这些可以包括书籍,甚至在线课程..在这篇文章中,我们为Python编写了最好的书籍,无 ...

  9. python常用代码大全-Python常用库大全

    Python常用库大全,看看有没有你需要的. 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具 ...

  10. python表白代码照片墙-python入会生成照片墙 利用python生成照片墙代码

    本篇文章小编给大家分享一下利用python生成照片墙代码,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. PIL(Python Image Libr ...

最新文章

  1. c++窗口管理系统是什么_优秀的食堂管理系统让你对校园生活更充满希望
  2. (0029) iOS 开发之API HTTP 请求调试网站
  3. 关于团队建设,穆帅能教我们什么?
  4. Linux系统磁状态检测,检测Linux硬件状态
  5. Android studio之导入新库提示Add library ‘Gradle*****@aar‘ to classpath
  6. mysql双机热备实现
  7. python内建函数是什么_python适用的内建函数
  8. 混日子不是你的错,根源在这里
  9. android gps 速度,Android 获取GPS速度
  10. pc模式 华为mate30_华为Mate30手机怎么投屏到电脑上呢
  11. 全球电动汽车电池隔膜行业调研及趋势分析报告
  12. 如果北京的房价下跌,到底能跌多少?
  13. vscode格式化报错
  14. Spring 学习笔记(day02)
  15. 网络游戏中玩家在线数据的存取
  16. 敏之澳电商:拼多多打造爆款的具体步骤
  17. typescript ts 错误列表
  18. 河南省多校联盟二-C
  19. 文献分享:个体化治疗中新抗原的识别鉴定 Identification of neoantigens for individualed therapeutic cancer vaccines
  20. 网络工程师必备(网线制作)

热门文章

  1. 爬取拉勾网招聘信息笔记
  2. cygwin apt-cyg
  3. 为知笔记docker搭建
  4. 花了我一个晚上时间整理的Python魂斗罗小游戏源代码
  5. android 获取root权限原理解析,手机如何获得root权限 原理以及作用是什么
  6. 【论文调研】IJCAI-2019 论文投稿与录用调研报告
  7. DITHER 抖动算法
  8. OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda\envs\pytorch-1.4\lib\site-package
  9. 怎么把PDF转换成图片?教大家两种方式转换
  10. python中自然数怎么表示_Python Numpy 自然数填充数组的实现