在我的团队里经常会需要并行程序,因为我们要在 S3 上操作我们数据库中大量的数据 。
如果该任务是 IO 密集型的(实际上很多任务都是),我们就可以很容易地部署 Python 线程 。但如果任务是 CPU 密集型的,用 Python 就比较不方便了,因为有全局解释器锁的存在 。
我非常享受在 Go 语言中简单代码不用修改就能直接多线程运行的爽快感 。不知你在 Python 中有没有遇到过这种问题:直接复制粘贴的多线程代码却完全不工作 。在 Go 语言中就不会有此问题 。
部署简单
我比较喜欢把所有依赖放在单个二进制文件里 。我经常在 EC2 服务器上运行自己的脚本,好让环境更加接近我们在 S3 上的服务器 。如果用 Python 的话,我需要保证所有需要的包都在服务器上装好,而且我的同事不能在服务器上装任何可能产生冲突的包 。
虚拟环境可以解决大部分问题,但我还是觉得用 Go 语言更方便 。
我一般是在 Mac 和 Linux 上交叉编译我的代码,将其拷贝到远程服务器上,然后就可以任其运行了 。我的代码所需要的所有依赖都在一个二进制文件里 。
风格一致
一开始,Go 语言的格式化工具 gofmt 实在是让我抓狂,尤其是它在代码缩进时要求使用 tab 键而不是空格键 。我觉得这简直是疯了 。
但是我用了一段时间后,就开始“真香”了 。写代码时,我在格式上可以天马行空,格式化工具会帮我完成一切 。我的所有代码风格都是一致的,即使我是在写不同的项目 。这是因为格式化是标准 Go 工具的一个特性 。
但我如果想在 Python 中实现这一点,就要费些劲儿了 。我需要正确地配置 pylint 工具,并要保证在每一个项目中都使用它 。
更便捷的工具
Gofmt 只是 Go 语言众多工具中的一个小例子 。所有我喜欢用的编辑器——VSCode,vim 和 Sublime Text 中,都有 Go 语言相应的扩展,让我能够方便地享受到 Go 工具的优点 。
这样,我就能获得写 Java 时的那种智能体验,却不需要真正使用一个 IDE 。我在用 Python 时从未获得过这种体验 。
Go 语言当然也有缺点我每次看到批评 Go 语言的文章时,里面讲的几乎都是 Go 语言对关键特性的缺失,比如泛型 。我倒是认为没有泛型没什么影响——你会发现,使用 map 和切片(slice)就能实现多得惊人的操作 。但是我在使用 Go 语言的过程中遇到了很多其他问题 。
缺乏灵活性
首先,Go 语言可能是我用过的语言里最“固执”的语言了 。比如,它除了会强迫你使用 tab 而不是空格键缩进(假设你用了 gofmt 工具),会强迫你使用特定的文件组织结构,还会强迫你在 GOPATH 环境变量中编程,如此等等 。这种语言有太多难以改变的特性了 。
Go 语言简单易学的原因之一恐怕就是你不能改变这些特性 。如果你不愿意将所有首字母大写的变量名 export 一遍,那真是抱歉了 。幸运的是,Go 的这些特性倒是没有触犯我的原则底线,但是如果有人认为里面的某些要求根本无法理喻,我也能够理解 。
相比之下 Python 就灵活多了 。
库支持有点差劲
【库管 库6.uno】在这方面把 Go 语言和 Python 做比较有些不公平 。Go 的出现比 Python 晚很多,但当我发现有些功能 Go 居然不支持的时候,还是觉得很困惑 。我甚至发现 StackOverflow 上很多人 po 出了本应该作为内置功能的代码段,而且大家都需要该功能,纷纷将代码复制粘贴到自己的项目下 。这类功能不应该嵌入到语言内部吗?
说到这里,我想到了近几年的两个例子:
- 给切片排序(幸运的是在 Go 1.8 版本中这点方便多了)
- 淘宝品牌库内已存在品牌却找不到是怎么回事?
- 妇科门诊病历书写规范模板电子病历女性 妇科门诊病历书写范文文库
- 和妹子聊天话题库大全软件 女生话题聊天
- su导入jpg材质 su如何添加材质库
- 地下车库旁的房子风水 地下车库车位风水
- 米库 米国内库的
- 教大家苹果手机怎样设置铃声 iphone设置铃声自定义库乐队
- 流年冲开墓库 风水倒冲墓库详解
- 兰溪东风水库钓鱼 王溪东风水库路线
- 优衣库的发热内衣真的会发热吗有人买过没,优衣库的发热内衣有几度
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
