极客视点
极客时间编辑部
极客时间编辑部
113243 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/05:34
登录|注册

使用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. 错误很难自省

大多数人都抱怨 Go 的错误处理太过冗长,也很难使用。在 Go 1.13(2019 年 10 月)中,添加了用于包装、拆包和比较的优秀方法,但不幸的是,采用率方面我们处于落后状态。
使用 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
收起评论
大纲
固定大纲
生产中的 Go
1. 对新手工程师来说,Go 很乏味,但很简单
2. 标准库可以满足需要
3. 快速、简单的构建影响一切
Go 的痛点
1. 没有官方的包管理者故事
2. GOPATH 让人困惑
3. 错误很难自省
4. Nil versus zero values Nil 与零值
5. 缺乏面向对象的表现力
结论
显示
设置
留言
1
收藏
47
沉浸
阅读
分享
手机端
快捷键
回顶部