Less is more。 ——路德维希·密斯·凡德罗

学习知识的过程就像盖房子,所以我们的图纸——【学习路径】也秉承建筑大师凡德罗的理念【少即是多】,不会堆砌大量的学习资料,最终放进同学们的收藏夹吃灰,但也绝不是简单得像一张白纸,让你觉得空洞无物,没有收获。

实践是检验真理的唯一标准

牛牛在工作中先后掌握了C/C++、Python、Php、Golang等多门语言,作为一个有5年Golang开发经验的高级工程师,负责过头条、腾讯技术栈向Golang的迁移,有丰富的Golang实践经验。

牛牛总结的学习路径都是经过反复思考、亲身实践的,希望能为跃跃欲试的小伙伴们打开Golang的大门。

萌新入门

入门讲究的是什么?

是快,是简单!

入门的资料一定要简单明了,深入浅出,耗时也不能太久。如果时间过长,很容易消耗学习信心,建议给自己一个可行的目标时间。根据牛牛的经验,这部分内容安排7-15个学习日会比较合适。

《Go语言学习笔记》

首先推荐这本大神级的书,相信不少小伙伴都对它有所耳闻,牛牛也是通过这本书入门的,它介绍了Golang的发展历程、基本语法、以及一些特性。

语法是一定要掌握的。而管道、协程、垃圾回收之类的,如果似懂非懂,不必深究,先学会使用即可。阅读本书的目的就是对Golang整个体系有所了解,为后面的学习打下基础,在实战中,遇到问题再回来查阅。

《一文Go起来》

这里不免有些王婆卖瓜,是的,这是牛牛写来给小伙伴入门专用的,自认为还是写得比较清晰明了。跑完文中所有例子,相信你会对Golang的玩法有个完整的轮廊。但是内功,还需要继续修炼。小伙伴们如果有疑惑欢迎随时私信牛牛。

《uber编码规范》

要用一门语言进行开发,当然得了解其编码的规范,一是能避免一些奇奇怪怪的坑;二是我们应该从一开始就要对代码有追求,后面才可以写出高品质的代码。


渐入佳境

做完上面的功课,成为一个入门级Golang开发大抵是没问题的,但要成为一名优秀的主力开发,就需要下更多功夫。

这里推荐直接研究一些常用的包,Golang的包差不多就是其他语言的库,是平常开发中打交道最多的东西。根据二八原则,80%的开发场景,用的都是20%的包,咱们需要对一些关键包有深刻地理解,并且熟练掌握。

下面介绍几个必看的常用包,这些包基本上在《一文Go起来》的例子中都里有所涉及。

web开发的基础包,实际开发很少直接用。学习该包,主要是了解其主要方法,并快速搭建起一个web server。同时,研究关键入口方法的实现,在其他框架如gin中,这些方法会被使用到。

2.gin 一个相对比较成熟的web框架,腾讯云部分团队就用的这个框架。它拥有良好的性能和简单明了的接口。同时支持中间件、类型绑定等实用功能。建议通过源码学习下gin路由的实现、中间件的实现,对后面自己实现通用组件很有帮助。

3.grpc Google研发的一个rpc框架,基于Protobuf协议,所以有跨语言的特性,再加上使用了HTTP/2的管道,性能非常高。它在微服务框架下被广泛应用,要熟练掌握用法,了解关键的接口。

4.gorm 关系映射(Object/Relational Mapping)即ORM,是通过实例对象的语法,完成关系型数据库操作的技术。

Gorm就是一个Golang的ORM库,有了它,我们就可以像操作对象一样,去操作Mysql。针对Gorm,我们需要熟悉常用的增删查改、数据模型操作、回调器等内容,除了直接使用这些功能,我们也可以跳转进去看看源码,增强理解。

5.Runtime Golang进行时,重头戏,里面包含了Golang高并发的秘密,建议详细阅读,至少要理解几个要点:调度模型、堆栈结构、gc原理,理解之后语言层面立马就地起飞。


趁热打铁

看了以上包之后,小伙伴们是不是觉得自己的底子扎实了很多?这时候我们来乘胜追击!

Golang有很多明星项目,Etcd就是其中一个。其代码优雅,逻辑清晰,学习之后实力能快速提升一个大档次,建议深入研究。

Etcd

【Etcd】代码优雅简洁,是Golang教科书式的工程实践,特别是其对Raft的实现,颇为精彩,分布式数据库TIDB的共识部分,就是基于Etcd-Raft定制化而成。Etcd在云原生场景,作为服务发现,配置中心等组件被广泛应用,值得深度学习。

《云原生分布式存储基石:etcd深入解析》

这本书分为3部分。

第1部分是对分布式系统的概念和一致性协议的综述,重点解析Raft协议,使读者对分布式键值存储系统有初步了解;

第2部分介绍Etcd安装、部署、运维、安全、API调用等方面的知识,帮助我们进一步掌握分布式系统的使用方法,熟悉其常见功能和使用场景;

第3部分从代码层次深入探讨了Etcd各大关键特性的具体设计与实现原理。

这本书主要是从相对宏观角度来讲解,理解起来会比较容易。


动手实践

读完《云原生分布式存储基石:etcd深入解析》之后,相信小伙伴们已经对Etcd有所了解了,但是不动手做一次,还是没法深刻理解,亲自动手实践和思考是同样重要的。

注意,对一个项目进行学习,不要一头扎进去去看源码。我们先了解Etcd是什么,能做什么事情。这里,可以先使用Etcd,去实现一个服务发现的功能,注意,要支持负载均衡,同时还要考虑下性能问题,毕竟服务发现是通信的关键路径。

《etcd技术内幕》

这本书主要从源码角度深入剖析Etcd,首先学会如何搭建源码环境,如何调试相关的命令,接着跟随该书,从基本的Raft协议开始学习,深入剖析Etcd-Raft、存储、对外接口的源码实现,配合完整代码食用最佳。


更上一层楼

我们完全掌握Etcd后,基本可以行走江湖了,称之高手不为过。 如果还想更进一步,可以学习以下几个杀手级项目。

Docker

云原生时代必须要掌握的组件之一。Docker是用Go语言写的,作为一个Go语言开发者,可以近水楼台先得月,去看看其源码实现。书籍的话,推荐《Docker源码分析》:

其实这本书写得不够简单有趣,但是阅读源码本身会比较枯燥,特别是去读一个新的项目,容易在里面迷路,这时候有本书领航,能少走不少弯路。

Kubernets

云原生时代必须要掌握的组件之一。k8s被称为云原生的操作系统,对其深刻理解,无论是面试还是工作,都有巨大优势。这本《Kubernets权威指南》可以给大家很多帮助:

Istio

Istio 是服务网格项目中抗大旗的存在,提供了流量管理、策略执行、访问控制等微服务治理所需特性。

《云原生服务网络Istio:原理、实践、架构与源码解析》这本书的结构如同它的名字一般,非常清晰,分为原理篇、实践篇、架构篇和源码篇,由浅入深地将Istio项目庖丁解牛,完全呈现在我们眼前。

工程实践

最后的最后,学习的知识还是要落实在实践中,如果小伙伴们还没毕业,那么可以选择一下Golang的团队去实习,甚至还可以主动去推动团队转型Golang,很多业务团队,都会手脚并用地投票赞成。


Q&A

1.这么多资料,需要看多久啊?

这篇路径从基础到大神,【萌新入门】和Etcd学完了,就算登堂入室,这一部分内容,快的话,也就两三。如果是工作学习繁忙的小伙伴,学完这部分后可以先告一段落,后面的内容随着机缘继续。

2.为什么学Golang还要看Kubernets?

我们要明白Golang的优势是什么?Golang是云原生的语言,乘云原生的风而起,通过学习Etcd,K8s,Istio这些云原生的代表项目,可以在Golang体系形成一个闭环,同时,这些项目本身都是用Golang写的,在阅读源码的过程中,看看大神是怎么写代码的,自己的代码水平也会更上一层楼。

3.为什么你列出来的入门书籍这么少?

少即是多,看一本书,再配合官网一些资料足矣,我们需要做的更多的是去理解它,研究它,去熟悉一些实际的项目,从成功的实践项目中学习。

4.Golang的就业前景如何?

我呆过的团队,陆陆续续都在往Golang迁移,其中,头条和某知名外企更是公司级迁移,大规模转Golang,其实这是很多团队手脚并用的投票结果。有性能高、开发效率高,还不容出错的语言,为什么不用呢?相信Golang凭借自身的优势,在未来热度还会继续增长下去。 画外音:腾讯目前也有很多Golang岗位空缺,有兴趣的小伙伴可以联系牛牛投递简历。


牛言牛语

Golang是一门有时代红利的语言,学习好了可以弯道超车,获得意想不到的收益。语言没定型的小伙伴,如果对当前语言的前景比较困扰,亦或是想扩展一门语言(双语言可是香饽饽),那么就按路径走一波,如果中途遇到卡点,也欢迎与牛牛交流。祝大家Offer拿到手抽筋,牛牛码特!