Go 語(yǔ)言學(xué)習(xí)路線來(lái)啦
時(shí)不時(shí)的有人問(wèn)我一些關(guān)于 Go 語(yǔ)言學(xué)習(xí)路線、學(xué)習(xí)資源方面的問(wèn)題,這篇文章就來(lái)詳細(xì)說(shuō)一說(shuō)。借此希望給那些正在學(xué)習(xí),或是想學(xué)習(xí) Go 語(yǔ)言的朋友一些幫助。
需要說(shuō)明的是,按照我推薦的來(lái)學(xué)習(xí),完全掌握 Go 相關(guān)開(kāi)發(fā)知識(shí),并且找到 Go 開(kāi)發(fā)的工作應(yīng)該是問(wèn)題不大的,當(dāng)然具體能達(dá)到什么樣的程度,得看個(gè)人了。
提醒一下,文中提到的所有書(shū)籍,都可以在公眾號(hào)后臺(tái)回復(fù)相應(yīng)的關(guān)鍵字獲?。?span style="background-color: rgb(255, 218, 81);">算法、操作系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、Go、微服務(wù),按需自取。
一、基礎(chǔ)知識(shí)
無(wú)論你學(xué)習(xí)什么編程語(yǔ)言,這些基礎(chǔ)知識(shí)是通用的,并且它們很重要,所以我覺(jué)得還是拿出來(lái)說(shuō)一說(shuō),只不過(guò)現(xiàn)在網(wǎng)上這方面的知識(shí)已經(jīng)很多了,知乎、公眾號(hào)搜一下,就能夠找到很多相關(guān)的內(nèi)容,所以我這里就簡(jiǎn)單說(shuō)下。
數(shù)據(jù)結(jié)構(gòu)和算法
推薦入門書(shū)籍《大話數(shù)據(jù)結(jié)構(gòu)》、《啊哈!算法》、《漫畫(huà)算法·小灰的算法之旅》、《算法圖解》,進(jìn)階的話可以看看《算法導(dǎo)論》、《算法》。

如果覺(jué)得書(shū)籍比較枯燥,網(wǎng)上也有一些付費(fèi)專欄,可以訂閱來(lái)看看。注意一點(diǎn),如果不是搞算法方向的話,掌握最基礎(chǔ)常用的內(nèi)容就可以了,沒(méi)必要去死磕太多高級(jí)的數(shù)據(jù)結(jié)構(gòu)和算法。
鞏固算法知識(shí)的話,可以上 Leetcode 刷幾個(gè)題。當(dāng)然,這塊內(nèi)容還有一個(gè)作用,那就是應(yīng)付面試,大家都懂的。我的 Github 上面有一個(gè)項(xiàng)目,可以幫助學(xué)習(xí)學(xué)習(xí)和鞏固算法,地址:
https://github.com/roseduan/algo-learn
項(xiàng)目使用 Go、Java、Python 實(shí)現(xiàn)了常用的數(shù)據(jù)結(jié)構(gòu)和算法,以及相關(guān) Leetcode 題目。
操作系統(tǒng)
這塊的內(nèi)容,簡(jiǎn)單看下就好,了解下基礎(chǔ)的概念,在工作的前幾年里,你可能不太會(huì)用得上太多操作系統(tǒng)上面的知識(shí),但相信我,這是職業(yè)生涯進(jìn)階必過(guò)的坎,遲早會(huì)遇上的。
學(xué)習(xí)資源推薦:書(shū)籍《操作系統(tǒng)概念》、《深入理解計(jì)算機(jī)系統(tǒng)》、《現(xiàn)代操
作系統(tǒng)》。

書(shū)籍看不下去的,很能理解你(因?yàn)槲乙部床幌氯ィ?,這里推薦一個(gè)學(xué)堂在線的操作系統(tǒng)課程:
https://www.xuetangx.com/course/THU08091000267/1516699
是清華大學(xué)的公開(kāi)課程,概念比較基礎(chǔ)容易理解,想要進(jìn)階深入的話,人家也有配套的操作系統(tǒng)實(shí)驗(yàn)可以跟著做。
計(jì)算機(jī)網(wǎng)絡(luò)
基礎(chǔ)書(shū)籍:《圖解 HTTP》、《圖解 TCP_IP》、《網(wǎng)絡(luò)是怎樣連接的》。
進(jìn)階書(shū)籍:《計(jì)算機(jī)網(wǎng)絡(luò)·自頂向下方法》、《TCP_IP 詳解》。

同樣,知道你看不下去書(shū)籍,在中國(guó)大學(xué) MOOC 上面有一些名校的公開(kāi)的網(wǎng)絡(luò)課程,都是比較基礎(chǔ)的,可以在上面找找,有挺多質(zhì)量不錯(cuò)的。
數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)的重要性就不用說(shuō)了,必備的知識(shí)。
基礎(chǔ)的 sql 掌握起來(lái)應(yīng)該沒(méi)啥難度,自己多練練就行了,推薦書(shū)籍《SQL 必知必會(huì)》、《MySQL 必知必會(huì)》。
想要進(jìn)階,可以多了解下數(shù)據(jù)庫(kù)一些基本設(shè)計(jì)概念,推薦書(shū)籍《數(shù)據(jù)庫(kù)系統(tǒng)概念》,對(duì)于 mysql 進(jìn)階,例如 B+ 樹(shù)存儲(chǔ)模型、事務(wù)、索引、鎖等,推薦書(shū)籍《高性能 mysql》、《MySQL 技術(shù)內(nèi)幕:InnoDB 存儲(chǔ)引擎》。

二、Go 語(yǔ)言基礎(chǔ)
說(shuō)到正題 Go 語(yǔ)言了,如果你是 Go 語(yǔ)言零基礎(chǔ),或者剛?cè)腴T不久,都可以順著我的這個(gè)路徑學(xué)習(xí)鞏固一下。
推薦入門書(shū)籍《Go 語(yǔ)言學(xué)習(xí)筆記》、《Go 語(yǔ)言趣學(xué)指南》、《Head First Go》,跟著書(shū)籍多敲敲代碼,入門沒(méi)有太大的問(wèn)題。

還有我私藏的一些在線學(xué)習(xí) Go 語(yǔ)言的資料:
1. Go By Example 中文版 : https://gobyexample-cn.github.io,使用代碼示例來(lái)學(xué)習(xí) Go 語(yǔ)言。
2. Go 面試題 : http://www.topgoer.cn/docs/gomianshiti/mianshiti,也是使用代碼示例來(lái)講解 Go,用來(lái)準(zhǔn)備面試也是很好的。
3. 無(wú)聞大佬的在線入門指南 : https://github.com/unknwon/the-way-to-go_ZH_CN
4. 跟著單元測(cè)試學(xué)習(xí) Go : https://github.com/quii/learn-go-with-tests,有中文版。
學(xué)完基礎(chǔ),知道你可能想試試手,這里推薦幾個(gè)初級(jí)的項(xiàng)目,隨意挑選自己感興趣的一兩個(gè)即可。
1. starcharts : https://github.com/caarlos0/starcharts,項(xiàng)目的功能是生成 Github 上面的項(xiàng)目的 star 趨勢(shì)圖,核心代碼不多,用來(lái)練手很合適。
2. gorched : https://github.com/zladovan/gorched,使用 Go 寫(xiě)的一個(gè)小游戲。
3. pacgo : https://github.com/danicat/pacgo,也是使用 Go 寫(xiě)的一個(gè)小游戲,每一步都有詳細(xì)的描述和代碼實(shí)現(xiàn)。
4. wechat-go : https://github.com/songtianyi/wechat-go,微信 web 版 API 的 Go 實(shí)現(xiàn),模擬微信網(wǎng)頁(yè)版的登錄/聯(lián)系人/消息收發(fā)等功能。
三、Go 語(yǔ)言進(jìn)階
掌握了基礎(chǔ)的 Go 相關(guān)語(yǔ)法知識(shí)之后,可能需要更加深入的理解 Go 語(yǔ)言,對(duì)于初學(xué)者來(lái)說(shuō),可以挑選自己感興趣的部分看看,想一下子全部吃透不太可能。
注意這塊內(nèi)容是比較獨(dú)立的,可隨時(shí)查看,不會(huì)妨礙你學(xué)習(xí)后面的內(nèi)容。
這里推薦書(shū)籍《Go 程序設(shè)計(jì)語(yǔ)言》(號(hào)稱 Go 圣經(jīng))、《Go 專家編程》、《Go 語(yǔ)言高級(jí)編程》。

在線的學(xué)習(xí)資料:
1.《Go 語(yǔ)言設(shè)計(jì)與實(shí)現(xiàn)》: https://draveness.me/golang。
2.《Go 語(yǔ)言高級(jí)編程》: https://chai2010.cn/advanced-go-programming-book。
想要進(jìn)一步鞏固所學(xué)知識(shí),這里推薦幾個(gè)比較進(jìn)階的項(xiàng)目給你:
1. rosedb : https://github.com/roseduan/rosedb,不要臉的推薦一下自己的項(xiàng)目,一個(gè)用 Go 實(shí)現(xiàn)的簡(jiǎn)易高效的 k-v 存儲(chǔ)引擎。
2. gochat : https://github.com/LockGit/gochat,一個(gè) Go 語(yǔ)言實(shí)現(xiàn)的輕量級(jí) im 系統(tǒng),對(duì)網(wǎng)絡(luò)方面熟悉或者感興趣的可以看看。
3. 7DaysGolang : https://github.com/geektutu/7days-golang,7 天使用 Go 從零實(shí)現(xiàn) web 框架、分布式緩存、ORM 框架,、RPC 框架,代碼量不多,但是質(zhì)量挺不錯(cuò)的。
四、Web 開(kāi)發(fā)
基礎(chǔ)知識(shí)掌握之后,可以上手做一些 web 應(yīng)用,進(jìn)一步了解更多的 Go 語(yǔ)言相關(guān)框架以及生產(chǎn)環(huán)境中的常用中間件,推薦書(shū)籍《Go Web 編程》。

可以學(xué)習(xí)下 web 框架 Gin、beego:兩個(gè)框架都比較的流行,選擇其中一個(gè)其實(shí)就可以了,推薦 Gin。官方文檔都有中文,照著 demo 敲一下,了解下怎么處理 HTTP 請(qǐng)求的。
最好掌握一下比較流行的 ORM 框架 Gorm,有官方中文文檔,照著 demo 敲一下基本上兩天就能掌握了,后面遇到不會(huì)的再來(lái)查。
基本上看官方文檔就可以了,不用去找其他的書(shū)籍,沒(méi)有比官方文章更正宗的資料了。
推薦幾個(gè)使用 Go 構(gòu)建的基礎(chǔ) web 項(xiàng)目:
1. gin-vue-admin : https://github.com/flipped-aurora/gin-vue-admin,使用 Gin 框架構(gòu)建的后臺(tái)管理系統(tǒng)。
2. ferry : https://github.com/lanyulei/ferry,基于 Gin + Vue + Element UI 前后端分離的工單系統(tǒng)。
3. go-admin : https://github.com/go-admin-team/go-admin,Gin + Vue + Element UI 的前后端分離權(quán)限管理系統(tǒng)。
對(duì)于 web 項(xiàng)目的學(xué)習(xí),可能有同學(xué)覺(jué)得項(xiàng)目太龐雜,根本不知道怎么下手。我想建議的是,可以在本地把項(xiàng)目跑起來(lái),然后斷點(diǎn)調(diào)試一個(gè) HTTP 請(qǐng)求的整體流程,搞懂了一個(gè)接口,其他的大同小異。
五、微服務(wù)
目前 Go 在微服務(wù)中的應(yīng)用也比較廣泛,但說(shuō)實(shí)話,微服務(wù)是一個(gè)太龐大的話題,你不可能把每一個(gè)核心的問(wèn)題都能夠搞清楚,而且也沒(méi)條件,或許只能在公司的具體的微服務(wù)生產(chǎn)環(huán)境中,才能夠?qū)ο嚓P(guān)的概念有更加深刻的體會(huì)。
推薦一本微服務(wù)概述的基礎(chǔ)書(shū)籍《微服務(wù)設(shè)計(jì)》、《微服務(wù)架構(gòu)設(shè)計(jì)模式》,可以幫助你理解微服務(wù)的建模、集成、測(cè)試、部署和監(jiān)控的一些基礎(chǔ)知識(shí)。

推薦 Go 語(yǔ)言的微服務(wù)框架 GoKit、GoMicro、go-zero、kratos,可以隨便選擇一個(gè),理解其基本的用法、設(shè)計(jì)等等。其中 go-zero 和 kratos 是國(guó)內(nèi)開(kāi)源的,因此都有比較詳細(xì)的中文文檔。
這里推薦一個(gè)在線學(xué)習(xí)的資料:
https://ewanvalentine.io/microservices-in-golang-part-1
手把手實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 Go 微服務(wù)項(xiàng)目,你可以通過(guò)這個(gè)項(xiàng)目來(lái)學(xué)習(xí)微服務(wù)的相關(guān)知識(shí),并且有中文版。
最后,再提醒一下,文中提到的所有書(shū)籍,都可以在公眾號(hào)roseduan寫(xiě)字的地方后臺(tái)回復(fù)相應(yīng)的關(guān)鍵字獲?。骸舅惴?、操作系統(tǒng)、網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)、Go、微服務(wù)】,按需自取。
題圖:from wallheaven.cc
