极客时间已完结课程限时免费阅读

结束语|和你一起迎接Go的黄金十年

结束语|和你一起迎接Go的黄金十年-极客时间

结束语|和你一起迎接Go的黄金十年

讲述:Tony Bai

时长11:15大小10.28M

你好,我是 Tony Bai。
在虎年春节营造的欢乐祥和的气氛中,我们迎来了这个专栏的最后一节课。
这个专栏的撰写开始于 2021 年 5 月中旬,我使用 GitHub 仓库管理专栏文稿,这是我的第一次提交:
从那时开始,我便进入了专栏写作的节奏。从 2021 年 5 月到 2022 年 2 月,9 个月的时间,我洋洋洒洒地写下了 20 多万字(估计值),写作过程的艰辛依然历历在目。
你见过凌晨 4 点你所居住的城市吗?我每周至少要见三次。你每天能睡多长时间呢?4~5 个小时是我的常态。在日常工作繁忙,家里带俩娃的背景下,这算是挑战我自己的极限了!但当我看到有那么多订阅学习专栏、认真完成课后思考题以及在留言区留言的同学,我又顿感自己的付出没有白费,我的自我挑战是成功的。
“老师,你跑题了!”
不好意思,小小感慨了一下。我们还是回到结束语上来。我想了很久,在这最后一讲里,还能给你说点什么呢?人生大道理?职涯规划建议?轻松的、搞笑的段子?可惜这些我都不擅长。最后,我决定借着这篇结束语,和你聊聊下面这几件事,请耐心地听我道来。

专栏回顾与“与时俱进”

在下笔写这篇文章之前,我认真回顾了一下这门课的内容,对照着 Go 语言规范细数了一下,这门课覆盖了绝大多数 Go 语言的语法点,这为你建立 Go 语言的整体知识脉络,后续继续深入学习奠定了基础。这也是我在设计这门课的大纲时的一个基本目标,现在这个目标算是实现了。
而且,从同学们的留言反馈情况来看,彻底抛弃 GOPATH,把 Go Module 构建模式、Go 项目布局的讲解前置到入门篇中,是无比正确的决定。相信你在学完这些知识点后,即便遇到规模再大的 Go 项目,也能“庖丁解牛”,快速掌握项目的结构,并知道从何处开始阅读和理解代码,这为你“尽早地动手实践”提供了方便。
另外,这个专栏对一些语法概念,比如切片、字符串、map、接口类型等进行了超出入门范畴的原理性讲解,也得到了来自同学们的肯定,这也算是这个入门课的吸睛之处。
不过课程依然存在遗憾,其中最令我不安的就是对“指针”这个概念的讲解的缺失。在规划课程之时,我没有意识到,很多来自动态语言的同学完全没有对“指针”这个概念的认知,我的这个疏忽给一些同学的后续学习带来了困惑。为了弥补这个遗憾,我会在后面以加餐的形式补充对 Go 指针的基础讲解
按理说,写完这一讲后,我们的这个专栏就正式结束了。但我们都知道,即将发布的 Go 1.18 版本将加入泛型语法特性,对于定位为“Go 语言第一课”的本专栏来说,对泛型语法的系统讲解肯定是不能缺少的,并且,Go 泛型很可能会是 Go 语法特性的最后一次较大更新了。
虽然我们已经通过加餐聊过泛型了,但那些还是比较粗线条的,所以在 2022 年 Go 1.18 泛型正式发布后,我会补充泛型篇,通过大约 3 节课给你系统、全面地介绍 Go 泛型语法的细节。我们的专栏也要做到“与时俱进”!

接下来,我该学点啥?怎么学?

就像这一讲的头图所写的那样,这节课的结束不是你 Go 语言学习的终点,而是你深入和实践 Go 的起点。专栏的留言区也有同学在问:Go 应该如何进阶呢?进阶的话我该学点啥呢?
这里我借用“T 字形”发展模式,按语言深度工程宽度两个方向,在一幅图中列出 Go 进阶需要了解的知识与技能点:
沿着“语言深度”这条线我们看到,在纯语言层面的进阶,我们要学习和理解的知识点还有很多,包括这个专栏没有包含的反射(reflect)、cgo(与 C 语言交互的手段)、unsafe 编程等高级语法点,还有迈向 Go 高级程序员必要的 Go 编译器原理、Go 汇编、Goroutine 调度、Go 内存分配以及 GC 等的实现细节。
当你掌握这些之后,你就会有一种打通“任督二脉”的感觉,再难的 Go 语言问题在你面前也会变得简单透明。更重要的是,这会让你拥有一种判断力,可以判断在什么场合不应该使用 Go 语言。《Kubernetes Up&Running》一书的作者、Google 开发人员凯尔西·海托(Kelsey Hightower)曾说过:“如果你不知道什么时候不应该使用一种工具,那你就还没有掌握这种工具”。拥有这种判断力,也代表你真正掌握了 Go 语言。
当然,Go 语言的进阶同样也离不开工程层面的知识与技能的学习。在上面图中,我将工程宽度分成两大块,一块是 Go 标准库与 Go 工具链,另外一块是语言之外的工程技能。这些知识与技能都是你在 Go 进阶以及 Go 实践之路上不可或缺的。
那么知道了学啥后,又该如何学呢?
其实,这个专栏中我一直强调的“手勤 + 脑勤”同样适合 Go 进阶的学习,多实践多思考是学习编程语言的不二法门。
此外,在进阶学习的过程中,我还要向你推荐一种学习方法,同时这也是我本人使用的方法,那就是“输出”。如果你对“输出”这个词还不太理解,那么你应该或多或少听说过“费曼学习法”吧?
费曼学习法是由诺贝尔物理学奖得主理查德·菲利普斯·费曼贡献给全世界的学习技巧。这个学习法中的一个环节就是以教促学,也就是学完一个知识点后,用你自己的理解将这个知识点讲给其它人,在这个过程中,你既可以检验自己对这个知识点的掌握程度,而且也可通过他人的反馈确认自己对这个知识点的理解是否正确。而这个学习技巧的本质就是“输出”。
在如今移动互联网的时代,“输出”拥有了更多样的形式,比如:
学习笔记 / 博客 / 公众号 / 问答 / 视频直播 / 音频播客 / 社群;
开源 / 内源项目;
内部培训 / 外部技术大会;
译书 / 著书。
所有的这些形式都要遵循一个共同点:公开,也就是将你的“输出”公之于众,接受所有人的检验与评判。这个过程一旦正常运转起来,可以快速修正你理解上的错误,加深你的理解,加快你的学习,并会敦促你主动优化你后续的输出。形成了良性循环之后,再高深的知识点对你来说也就不是什么问题了。
不过古人云:“知易行难”,学会“输出”也需要一个循序渐进的过程。尤其是一开始“输出”时,不要怕错,不要怕没人看,更不要怕别人笑话你。

Go 语言的未来

最后我们再来谈谈大家都关心的话题:Go 语言的未来
在我写这一讲的时候,刚刚好著名编程语言排名指数TIOBE发布了 2022 年 2 月编程语言排名情况,如下图:
在这期排名中,Go 上升到第 11 位,相较于 2021 年年底各大编程语言的最终排名,以及 2021 年 2 月份的排名都上升了 2 位。Go 语言位次的提升在我的预料之中。TIOBE 在 1 月份发布的 2021 年年终编程语言排行榜的配文中也认为,除了 Swift 和 Go 之外,尚不会有新的编程语言能迅速进入前 3 名甚至前 5 名,这也在一定程度上证明了 TIOBE 对 Go 发展趋势的看好。
再老生常谈一下,纵观近十年来的新兴后端编程语言,Go 集齐了成为下一代佼佼者需要的所有要素:名家设计(三巨头)、出身豪门(谷歌)、杀手应用(Kubernetes)、精英团队(Google 专职开发团队)、百万拥趸、生产力与性能的最佳结合,以及云原生基础设施的头部语言。
在 2021 年,为了加强 Go 社区建设与 Go 官网改进,Go 团队雇佣了专人负责。Go 核心开发团队专职人员的数量逐年增多,根据Go 核心团队工程总监萨梅尔 - 阿马尼 (SAMEER AJMANI) 在之前 Go Time 的 AMA 环节中透露的信息,当前 Go 核心团队的规模已经达到了 50 人:
而且,Go 语言在国内的发展也是越来越好。大厂方面,腾讯公司近几年在 Go 语言方面投入很大,不仅让 Go 语言成为其公司内部增速最快的语言,腾讯还在 2021 年发布和开源了多款基于 Go 开发的重量级产品。
字节跳动更是国内大厂中拥抱 Go 语言最积极的公司之一,它的技术体系就是以 Go 语言为主,公司里有超过 55%的服务都是采用 Go 语言开发的。长期的 Go 实践让字节跳动内部积累了丰富的 Go 产品和经验,2021 年字节也开启了对外开源之路,并且一次性放出了若干个基于 Go 的微服务框架与中间件产品,包括 kitex、netpoll、thriftgo 等。这些开源项目统一放在https://github.com/cloudwego下面了。
除了大厂积极拥抱 Go 之外,小公司与初创公司也在积极探索 Go 的落地。根据我从圈子里、周边朋友、面试时了解的情况,用 Go 的小公司 / 初创公司越来越多了。究其原因还是那句话:Go 语言是生产力与战斗力的最佳结合。这对小公司 / 初创公司而言,就是真(省)金(人)白(省)银(机器)啊。 甚至,Go 已经渗透到新冠防疫领域,我前不久得知,河北移动支撑的新冠疫情流调系统的后端服务也是用 Go 实现的。
2022 年,Go 语言的最大事件就是 3 月份 Go 1.18 的发布以及 Go 泛型的落地。泛型的加入势必会给 Go 社区带来巨大影响。随之而来的将是位于各个层次的 Go 包的重写或重构:底层库、中间件、数据结构 / 算法库,乃至业务层面。这一轮之后,Go 社区将诞生有关于 Go 泛型编码的最佳实践,这些实践也会反过来为 Go 核心团队提供 Go 泛型演化与在标准库中应用的素材。
在我们专栏的第一讲“前世今生:你不得不了解的 Go 的历史和现状”中,我曾提到过:绝大多数主流编程语言将在其诞生后的第 15 至第 20 年间大步前进。按照这个编程语言的一般规律,已经迈过开源第 12 个年头的 Go,很可能将进入自己的黄金 5-10 年。而 2022 年就很大可能会成为 Go 语言黄金 5-10 年的起点,并且这个标志只能是 Go 泛型语法的落地。
按照 Go 语言的调性,在加入泛型后,Go 在语法层面上很难再有大的改变了,错误处理将是最后一个硬骨头,也许在泛型引入后,Go 核心团队能有新的解决思路。剩下的就是对 Go 编译器、运行时层、标准库以及工具链的不断打磨与优化了。到时候,我们就坐收这些优化所带来的红利就可以了。
经过这些对 Go 语言当前状态和未来可能演化路线的分析,你是不是对 Go 的未来更加有信心了呢?
学习 Go 语言十余年的我,很庆幸,也很骄傲当初做出了正确的选择。最后,在 Go 即将迎来黄金十年的历史时刻,希望你能在 Go 语言之路上走的更远,并实现你的个人价值
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 22

提建议

上一篇
大咖助阵|海纳:聊聊语言中的类型系统与泛型
unpreview
 写留言

精选留言(36)

  • 文经
    2022-02-16
    感谢白老师的辛苦付出,我昨天开始带着部门的同事二刷这门课程。 也入手了白老师的新书《Go语言精进之路》1,2册,进一步学习。 十年后,我也会同样庆幸自己在2021年选择转战Go,并且遇到了这个专栏。 再次感谢白老师!

    作者回复: 感谢对我的各种支持:)。

    6
  • 张申傲
    2022-02-23
    这是我学习过的质量最高、老师最认真负责的专栏之一了,感谢老师的辛苦付出,我自己受益匪浅。期待老师后面的加餐和新的课程~

    作者回复: 谬赞了。感谢支持。

    3
  • return
    2022-02-18
    老师真是业界良心, 无私奉献啊。 感谢老师的辛勤产出, 受益匪浅。 期待老师有精力的时候 在出个进阶的。 买了好几个GO专栏, 白老师的 讲的最透彻 关键点讲的最好 非常喜欢。

    作者回复: 谬赞了。感谢支持!

    2
  • aLong
    2022-02-16
    通过此课程还是填补了很多从其他平台、书籍、视频中未提及的的知识点。看到这个课程介绍我最开始不是很想买。因为入门的内容在网上还是很多的,其中视频课程是最多的。我目前已学习36课,已经感觉到很多知识在其他的课程中没有的内容。希望以后老师在进阶或典型实践方向推出系列可能。最后,感谢老师和老师的课程。

    作者回复: 感谢支持!继续加油!

    2
  • ゝ骑着小车去兜风。
    2022-03-01
    老师后续会不会考虑再出一个go语言的进阶版课程,我特别期待。真是太喜欢这门课了,其中方法和接口这部分内容解决了我之前太多的难题,对go有了更深一点的认识!

    作者回复: 感谢支持!后续是否有其他课程,目前尚不确定:)

    共 2 条评论
    1
  • Julien
    2022-02-18
    有幸在学习本课程的同时,趁春节期间深入学习了Goroutine 调度原理和细节,今天下午还在公司内部做了技术分享,有一点成就感。这门课程很好,老师讲解很明了,感谢~

    作者回复: 👍。感谢支持。

    1
  • bearlu
    2022-02-17
    老师学完本专栏,接下来是需要做些什么项目?

    作者回复: 可以将你以前用其他语言编写的一些工具移植到go,或是之前想写但没有写的小项目或小工具用go实现一遍。当然最好是在工作中能把go用起来:)。

    1
  • 温雅小公子
    2022-02-16
    完结撒花🎉

    作者回复: 感谢支持。

    1
  • Sunrise
    2022-12-21 来自辽宁
    首先感谢作者,极客上的关于 Go 的专栏我几乎都买了,这篇 Go 语言第一课是我觉得质量最高买的最值的,老师的两本书也入手了,既然有第一课肯定有第二课吧,希望老师继续后续的课程。。。

    作者回复: 👍

  • 林枫
    2022-10-24 来自北京
    作为一个比较挑剔的读者,我认为这个课质量蛮高的

    作者回复: 👍

  • 功夫熊猫
    2022-08-01 来自江苏
    谢谢老师。
  • Asher
    2022-06-24
    点赞,质量很高。老师

    作者回复: 谢谢支持。

  • 天空
    2022-06-23
    打个卡

    作者回复: 收到!😁

  • $侯
    2022-06-10
    三刷了,老师能讲讲context吗~

    作者回复: 最近太忙,后续看看能否以加餐形式补充一下吧,但时间上暂不能保证😜。

    共 2 条评论
  • 李强
    2022-04-14
    老师讲的很系统,学完有收获,手动点赞!

    作者回复: 👍

  • 独钓寒江
    2022-04-11
    请问为什么多数偏入门的教程都没有讲数据库连接的呢?

    作者回复: go与数据库互操作算是go的一个应用了。而且多数语言与数据库操作都比较简单。没啥特殊的,也就没啥可讲的了。难点其实是在数据库侧,多数并不在语言侧。

  • 有课学
    2022-04-08
    感谢老师,想要继续深入的同学可以买《Go语言精进之路》1,2 册,我看里面是有涉及到一些课程里面没有提到的内容的,比如 reflect, unsafe 包的这部分内容

    作者回复: 👍

  • FECoding
    2022-03-24
    go 1.18 已经发布啦,泛型是啥时候更新呀

    作者回复: 写稿中:) go 1.18正式版发布前,担心泛型规范有变化,一直未下笔。

  • 寿限无
    2022-03-24
    老师的go语言精进之路讲得也很棒

    作者回复: 感谢支持。

  • William Ning
    2022-03-17
    刚学完20讲,先来看看有多少人到了最后一课~~ 2022-02-16 结课 抓紧时间,还不算太晚~~ 提前谢谢老师~

    作者回复: 💪