python你好代码-再见,Python。你好,Go语言。
原标题:再见,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语言。相关推荐
- 你好,再见;你好,幸会!
做PBOC/EMV的L2认证,有接近七年了.一直就在这个圈子里兜兜转转,有做过终端认证,有做过卡片认证. 偶尔玩玩L3,玩玩PCI,玩玩工具开发,中间库开发. 技术来来去去也就是Linux + C , ...
- python爬虫代码-学Python=写爬虫?不用代码也能爬下95%网站的数据!
你好,这里是BIMBOX,我是老孙. 前些天BOX群里一位小伙伴问我们,现在市面上有一千多块钱的Python网络课程,两个月学完,能入门网络爬虫,大部分网站的数据都可以爬下来,这个学费值不值得? 我们 ...
- python常用代码大全-python基础,python基础代码大全
Python是现在非常流行的编程语百言,也是四大编程语言之一,而且Python具有简单.易学.上手容易.功能强大等优势,非度常适合零基础人员学习,也是问初学者的首要选择. 而对于初学Python入门时 ...
- python常用代码大全-Python常用库大全,看看有没有你需要的
环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...
- python常用代码大全-Python常用库大全及简要说明
环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以在虚拟环境中执行命令.官网 v ...
- python基础代码大全-Python字典及基本操作(超级详细)
字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 比如有份成绩表数据,语文:79,数学:80,英语:92,这组数据看上去像两个列表,但这两个列表的元素之间有一定的关联关 ...
- python基础代码大全-python基础语法,python 代码命令大全
python: 1.语法强制缩进 2.区分大小写:iLoop与iloop是两个变量 3.变量无需申明,但是变量赋值前无法使用:a=3合法,b=a+3合法,b=a+c不合法,因为c未赋值前不能使用 4. ...
- python入门代码大全-python入门代码指南教程书籍推荐2020总结全集汇总
python入门代码指南教程书籍推荐2020总结全集汇总 记住,如果您想学习Python,市场上有很多可用的资源.这些可以包括书籍,甚至在线课程..在这篇文章中,我们为Python编写了最好的书籍,无 ...
- python常用代码大全-Python常用库大全
Python常用库大全,看看有没有你需要的. 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具 ...
- python表白代码照片墙-python入会生成照片墙 利用python生成照片墙代码
本篇文章小编给大家分享一下利用python生成照片墙代码,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. PIL(Python Image Libr ...
最新文章
- c++窗口管理系统是什么_优秀的食堂管理系统让你对校园生活更充满希望
- (0029) iOS 开发之API HTTP 请求调试网站
- 关于团队建设,穆帅能教我们什么?
- Linux系统磁状态检测,检测Linux硬件状态
- Android studio之导入新库提示Add library ‘Gradle*****@aar‘ to classpath
- mysql双机热备实现
- python内建函数是什么_python适用的内建函数
- 混日子不是你的错,根源在这里
- android gps 速度,Android 获取GPS速度
- pc模式 华为mate30_华为Mate30手机怎么投屏到电脑上呢
- 全球电动汽车电池隔膜行业调研及趋势分析报告
- 如果北京的房价下跌,到底能跌多少?
- vscode格式化报错
- Spring 学习笔记(day02)
- 网络游戏中玩家在线数据的存取
- 敏之澳电商:拼多多打造爆款的具体步骤
- typescript ts 错误列表
- 河南省多校联盟二-C
- 文献分享:个体化治疗中新抗原的识别鉴定 Identification of neoantigens for individualed therapeutic cancer vaccines
- 网络工程师必备(网线制作)
热门文章
- 爬取拉勾网招聘信息笔记
- cygwin apt-cyg
- 为知笔记docker搭建
- 花了我一个晚上时间整理的Python魂斗罗小游戏源代码
- android 获取root权限原理解析,手机如何获得root权限 原理以及作用是什么
- 【论文调研】IJCAI-2019 论文投稿与录用调研报告
- DITHER 抖动算法
- OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading “D:\Anaconda\envs\pytorch-1.4\lib\site-package
- 怎么把PDF转换成图片?教大家两种方式转换
- python中自然数怎么表示_Python Numpy 自然数填充数组的实现