使用Golang两年后,我有这些感受
极客时间编辑部
讲述:丁婵大小:7.64M时长:05:34
你好,欢迎收听极客视点。
过去两年来,工程师 ryan wang 就职于 Assembled ,期间他一直使用 Go 工作。对于 Go 的使用体验,ryan wang 特意写了一篇博文来描述,他坦言,Go 的表现基本上与广告宣传的一样,尽管有些怪异,但它非常适合专业工作。以下是 InfoQ 对其博文的翻译内容。
生产中的 Go
我们构建 Assembled,特意决定使用 Go。决定因素可归结为:静态类型、简单性、标准库和速度。在实践中,我所见过的一切都与 Go 在文档中所呈现的方式相吻合:Go 富有表现力、简洁、干净且高效……Go 可以快速编译成机器码,同时还具有垃圾收集的便利性及运行时反射的能力。这是一种快速的、静态类型的编译语言,但它感觉起来就像是一种动态类型的解释语言。
Go 有许多优点,比如以下几点。
1. 对新手工程师来说,Go 很乏味,但很简单
Go 的简单性使得新手工程师可以快速使用我们的代码库,而且我怀疑 Go 的设计迫使我们编写比以前更简单、更明确的代码。也就是说,简单的确会导致重复,这一点已经得到了充分的证明。截至撰写本文时,代码片段 if err != nil 在我们的代码库中出现了 2919 次。
2. 标准库可以满足需要
Go 的标准库是一座闪亮的“灯塔”,像 bytes、time 这样的包是全面且经过精心设计的。例如,在 Python 中,它会告诉我们第三方库采用的是 HTTP 默认缺省值。Go 的设计显然考虑了生产代码,举个例子,Assembled 有一段时间存在严重的性能问题,我们可以使用 net/pprof 和 runtime/pprof 进行调试。这些功能非常强大,并且易于通过 HTTP 处理程序启用,
3. 快速、简单的构建影响一切
Go 最好的地方在于,我们可以轻松运行 go build,并且几乎无需等待,就可以可靠地期望一个可以运行的可执行文件。快速、简单的构建体验使许多下游任务变得更容易。
除了上述 3 个优点外,Go 的标准格式和文档也值得一提,这让它看上去就是为专业人士打造的。
Go 的痛点
但是 Go 也有令人讨厌的怪癖,有很多已经被其他人记录下来了,出于完整性考虑,我将它们包括进来。
1. 没有官方的包管理者故事
从 Go 1.14(2020 年 2 月)开始,Go 模块就准备好投入生产使用了。在此之前,这里是“荒芜的西部”:我们登录了 dep,但没有机会迁移到模块中,而且 dep 非常缓慢。通常建议将依赖项签入到存储库中(例如,在 /vendor 文件夹中),这在生产环境设置中可能并不友好。
2. GOPATH 让人困惑
GOPATH 目录应该包含所有代码,这与简化从远程存储库中的获取有关,从理论上讲这很优雅,但在实践中却是令人困惑的。因为如果我们没有将代码放在正确的位置上,就什么都行不通。因此,Go 给我留下了非常负面的第一印象。
3. 错误很难自省
使用 1.13 版本之前编写的代码,不会对错误进行包装,这也特别痛苦。例如,在 Google 自己的 API bindings 中,请求的底层的 HTTP 错误不会被包装,因此无法作为 googleapi.RetrieveError、公共错误接口甚至是低级的 url.Error 进行检查。唯一的选项是字符串匹配,我们这样做,通常是为了捕获类似 invalid_grant 这样的 OAuth 错误。
例如,比较一下 Scala 中模式匹配是如何进行错误处理的。
4. Nil versus zero values Nil 与零值
对空值或缺省后故意将其值设置为零的值进行建模,是很乏味的。在我们的代码中,我们通常会返回一个指针和错误。通过引入非关联 nil 指针的可能性来打破类型安全。
5. 缺乏面向对象的表现力
Go 建议使用接口和类型嵌入来复制有用的面向对象行为,这种行为在其他语言中是自然存在的。事实证明,这些工具具有很大的限制性。
结论
总的来说,最初使用 Go 确实让我有些困惑,然而,在使用 Go 的这两年,我开始真正享受它的简单和明确性了。而且在 Assembled 公司,Go 语言确实非常适合我们的用例。
以上就是 ryan wang 对 Go 语言的使用体验,你尝试过 Go 吗?有什么体会呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(1)
- 最新
- 精选
- 文武木子使用后最大感受是原生构建web服务很快速3
收起评论