极客视点
极客时间编辑部
极客时间编辑部
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/04:51
登录|注册

一位Rust开发者使用Go的初体验

讲述:初明明大小:4.43M时长:04:51
你好,欢迎收听极客视点。
最近,PingCAP 研发工程师、Rust 语言核心成员尼克·卡麦隆(Nick Cameron)发文分享了他首次在大型且重要的项目中使用 Go 的体验。他表示,真正使用 Go 编程与体验其示例和编写玩具程序的感觉完全不同。以下内容摘自原文。

总体印象

用 Go 编程的感觉很棒。库程序里有我想要的一切,总体实现较为完善。学习体验也十分顺畅,不得不说,Go 是一种经过精心设计的实用性语言。

易学性

Go 非常易学,我为自己生产力的飞速提高而感到震惊。Go 易学的几个因素是:
Go 很精简。
标准库很出色(同样,也很小)。从生态系统中寻找并使用库程序非常容易。
几乎没有其他语言中所不具备的东西。Go 从其他既存语言中提取了很多内容,并进行完善,最后将它们很好地组合在一起。

乏味的样板式代码

Go 代码很快就会变得非常重复。这是由于它缺乏宏或者泛型这种用于减少重复的机制。
错误处理也会导致重复。许多函数中的样板式代码甚至比那些真正有价值的代码还要多。阅读 Go 代码会令人灰心丧气,因为你不得不忽略大量的无关代码或者在大量的相同代码中找到细微的不同。

一致性

作为一名语言设计者和程序员,Go 最让我惊讶的地方也许是它的内置功能和用户可用功能之间频频出现不一致。许多语言的目标之一就是尽可能让用户也使用内置功能,但 Go 不同 。使用 Go,你无法做那些内置功能可以做的事情。

我喜欢的方面

编译时间:绝对快,可以确定要比 Rust 快得多。
协程(goroutine)和信道(channel):Go 为生成协程和使用信道提供了轻量级的语法。尽管只是一个小细节,却使 Go 的并发编程体验比其他语言更优越,它真正揭示了语法的力量。
接口:它们并不复杂,并且在很多地方都很实用。
if …; … { } 语法:可以将变量的作用域限制在 if 语句真的很好,这与 Swift 及 Rust 中的 if let。
有着相似的效果,但用途更为广泛。
测试和文档注释都很容易使用。
Go 工具链非常友好:将所有东西都放在一个地方,而不需要在命令行上使用多个工具。
拥有垃圾收集器(GC):不用考虑内存管理真的会使编程更加轻松。
可变参数。

我不喜欢的方面

nil 切片:要知道 nil、nil 切片和空切片三者都不相同。
枚举类型并不是第一公民:使用常量模拟枚举让人感觉是一种倒退。
不允许循环引用:这实际上限制了包在划分项目模块中的可用性,因为它变相鼓励了在一个包中堆积大量文件或拥有大量零碎的小包。
switch 允许出现遗漏匹配的情况。
for … range 语句会返回一对“索引 / 值”。要想只获取索引很容易(忽略值就好),但若要只获取值,则需要显式声明。然而在大多数情况下,我更需要值而不是索引。
语法:
定义与用途存在不一致。
使用多值返回类型时,类型上需要括号,但 return 语句中却不需要。
声明一个结构体需要两个关键字(type 和 struct)。
采用大写命名法来标记公共或私有变量。
你无法在不同的包中编写带有接收器的函数,所以即使接口是“鸭子类型”的,你也不能为其他包中的类型实现这个接口,这使得它们的用处大大降低。

总结

Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。
Go 和 Rust 都是编译型语言,Go 的运行时得到了良好的实现,其速度毋庸置疑,而 Rust 运行时要小得多,它真的迅捷无比。在没有其他限制的情况下,选择使用 Go 还是 Rust 其实意味着一种权衡:一方面,Go 的学习曲线更短、程序更简单,这意味着更快的开发速度;另一方面,Rust 性能卓越,并且类型系统更富有表现力,这使程序更安全,也意味着更快的调试和错误查找。
以上就是卡麦隆首次使用 Go 的体验,希望能给你带来参考价值。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • priapus
    学了Go基础,突然不知道用Go来做什么……
  • 四道杠的红领巾
    go用来写业务现在还不是很多
  • 听见风在歌唱
    只是好奇go是什么,来学习一下
  • Geek_d02923
    go 搞起来
  • Geek_d02923
    感谢老师分享!
  • 王俊琴-Elena
    Go 跑起来
  • 福克斯
    Go语言是不错的,方便
  • 小斧
    Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。 Go 和 Rust 都是编译型语言,Go 的运行时得到了良好的实现,其速度毋庸置疑,而 Rust 运行时要小得多,它真的迅捷无比。在没有其他限制的情况下,选择使用 Go 还是 Rust 其实意味着一种权衡:一方面,Go 的学习曲线更短、程序更简单,这意味着更快的开发速度;另一方面,Rust 性能卓越,并且类型系统更富有表现力,这使程序更安全,也意味着更快的调试和错误查找。
收起评论
大纲
固定大纲
总体印象
易学性
乏味的样板式代码
一致性
我喜欢的方面
我不喜欢的方面
总结
显示
设置
留言
8
收藏
36
沉浸
阅读
分享
手机端
快捷键
回顶部