時不時的有人問我一些關於 Go 語言學習路線、學習資源方面的問題,這篇文章就來詳細說一說。藉此希望給那些正在學習,或是想學習 Go 語言的朋友一些幫助。
需要說明的是,按照我推薦的來學習,完全掌握 Go 相關開發知識,並且找到 Go 開發的工作應該是問題不大的,當然具體能達到什麼樣的程度,得看個人了。
提醒一下,文中提到的所有書籍,都可以在公衆號後臺回覆相應的關鍵字獲取:算法、操作系統、網絡、數據庫、Go、微服務,按需自取。
一、基礎知識
無論你學習什麼編程語言,這些基礎知識是通用的,並且它們很重要,所以我覺得還是拿出來說一說,只不過現在網上這方面的知識已經很多了,知乎、公衆號搜一下,就能夠找到很多相關的內容,所以我這裏就簡單說下。
數據結構和算法
推薦入門書籍《大話數據結構》、《啊哈!算法》、《漫畫算法·小灰的算法之旅》、《算法圖解》,進階的話可以看看《算法導論》、《算法》。
如果覺得書籍比較枯燥,網上也有一些付費專欄,可以訂閱來看看。注意一點,如果不是搞算法方向的話,掌握最基礎常用的內容就可以了,沒必要去死磕太多高級的數據結構和算法。
鞏固算法知識的話,可以上 Leetcode 刷幾個題。當然,這塊內容還有一個作用,那就是應付面試,大家都懂的。我的 Github 上面有一個項目,可以幫助學習學習和鞏固算法,地址:
https://github.com/roseduan/algo-learn
項目使用 Go、Java、Python 實現了常用的數據結構和算法,以及相關 Leetcode 題目。
操作系統
這塊的內容,簡單看下就好,瞭解下基礎的概念,在工作的前幾年裏,你可能不太會用得上太多操作系統上面的知識,但相信我,這是職業生涯進階必過的坎,遲早會遇上的。
學習資源推薦:書籍《操作系統概念》、《深入理解計算機系統》、《現代操
作系統》。
書籍看不下去的,很能理解你(因爲我也看不下去),這裏推薦一個學堂在線的操作系統課程:
https://www.xuetangx.com/course/THU08091000267/1516699
是清華大學的公開課程,概念比較基礎容易理解,想要進階深入的話,人家也有配套的操作系統實驗可以跟着做。
計算機網絡
基礎書籍:《圖解 HTTP》、《圖解 TCP_IP》、《網絡是怎樣連接的》。
進階書籍:《計算機網絡·自頂向下方法》、《TCP_IP 詳解》。
同樣,知道你看不下去書籍,在中國大學 MOOC 上面有一些名校的公開的網絡課程,都是比較基礎的,可以在上面找找,有挺多質量不錯的。
數據庫
數據庫的重要性就不用說了,必備的知識。
基礎的 sql 掌握起來應該沒啥難度,自己多練練就行了,推薦書籍《SQL 必知必會》、《MySQL 必知必會》。
想要進階,可以多瞭解下數據庫一些基本設計概念,推薦書籍《數據庫系統概念》,對於 mysql 進階,例如 B+ 樹存儲模型、事務、索引、鎖等,推薦書籍《高性能 mysql》、《MySQL 技術內幕:InnoDB 存儲引擎》。
二、Go 語言基礎
說到正題 Go 語言了,如果你是 Go 語言零基礎,或者剛入門不久,都可以順着我的這個路徑學習鞏固一下。
推薦入門書籍《Go 語言學習筆記》、《Go 語言趣學指南》、《Head First Go》,跟着書籍多敲敲代碼,入門沒有太大的問題。
還有我私藏的一些在線學習 Go 語言的資料:
1. Go By Example 中文版 : https://gobyexample-cn.github.io,使用代碼示例來學習 Go 語言。
2. Go 面試題 : http://www.topgoer.cn/docs/gomianshiti/mianshiti,也是使用代碼示例來講解 Go,用來準備面試也是很好的。
3. 無聞大佬的在線入門指南 : https://github.com/unknwon/the-way-to-go_ZH_CN
4. 跟着單元測試學習 Go : https://github.com/quii/learn-go-with-tests,有中文版。
學完基礎,知道你可能想試試手,這裏推薦幾個初級的項目,隨意挑選自己感興趣的一兩個即可。
1. starcharts : https://github.com/caarlos0/starcharts,項目的功能是生成 Github 上面的項目的 star 趨勢圖,核心代碼不多,用來練手很合適。
2. gorched : https://github.com/zladovan/gorched,使用 Go 寫的一個小遊戲。
3. pacgo : https://github.com/danicat/pacgo,也是使用 Go 寫的一個小遊戲,每一步都有詳細的描述和代碼實現。
4. wechat-go : https://github.com/songtianyi/wechat-go,微信 web 版 API 的 Go 實現,模擬微信網頁版的登錄/聯繫人/消息收發等功能。
三、Go 語言進階
掌握了基礎的 Go 相關語法知識之後,可能需要更加深入的理解 Go 語言,對於初學者來說,可以挑選自己感興趣的部分看看,想一下子全部喫透不太可能。
注意這塊內容是比較獨立的,可隨時查看,不會妨礙你學習後面的內容。
這裏推薦書籍《Go 程序設計語言》(號稱 Go 聖經)、《Go 專家編程》、《Go 語言高級編程》。
在線的學習資料:
1.《Go 語言設計與實現》: https://draveness.me/golang。
2.《Go 語言高級編程》: https://chai2010.cn/advanced-go-programming-book。
想要進一步鞏固所學知識,這裏推薦幾個比較進階的項目給你:
1. rosedb : https://github.com/roseduan/rosedb,不要臉的推薦一下自己的項目,一個用 Go 實現的簡易高效的 k-v 存儲引擎。
2. gochat : https://github.com/LockGit/gochat,一個 Go 語言實現的輕量級 im 系統,對網絡方面熟悉或者感興趣的可以看看。
3. 7DaysGolang : https://github.com/geektutu/7days-golang,7 天使用 Go 從零實現 web 框架、分佈式緩存、ORM 框架,、RPC 框架,代碼量不多,但是質量挺不錯的。
四、Web 開發
基礎知識掌握之後,可以上手做一些 web 應用,進一步瞭解更多的 Go 語言相關框架以及生產環境中的常用中間件,推薦書籍《Go Web 編程》。
可以學習下 web 框架 Gin、beego:兩個框架都比較的流行,選擇其中一個其實就可以了,推薦 Gin。官方文檔都有中文,照着 demo 敲一下,瞭解下怎麼處理 HTTP 請求的。
最好掌握一下比較流行的 ORM 框架 Gorm,有官方中文文檔,照着 demo 敲一下基本上兩天就能掌握了,後面遇到不會的再來查。
基本上看官方文檔就可以了,不用去找其他的書籍,沒有比官方文章更正宗的資料了。
推薦幾個使用 Go 構建的基礎 web 項目:
1. gin-vue-admin : https://github.com/flipped-aurora/gin-vue-admin,使用 Gin 框架構建的後臺管理系統。
2. ferry : https://github.com/lanyulei/ferry,基於 Gin + Vue + Element UI 前後端分離的工單系統。
3. go-admin : https://github.com/go-admin-team/go-admin,Gin + Vue + Element UI 的前後端分離權限管理系統。
對於 web 項目的學習,可能有同學覺得項目太龐雜,根本不知道怎麼下手。我想建議的是,可以在本地把項目跑起來,然後斷點調試一個 HTTP 請求的整體流程,搞懂了一個接口,其他的大同小異。
五、微服務
目前 Go 在微服務中的應用也比較廣泛,但說實話,微服務是一個太龐大的話題,你不可能把每一個核心的問題都能夠搞清楚,而且也沒條件,或許只能在公司的具體的微服務生產環境中,才能夠對相關的概念有更加深刻的體會。
推薦一本微服務概述的基礎書籍《微服務設計》、《微服務架構設計模式》,可以幫助你理解微服務的建模、集成、測試、部署和監控的一些基礎知識。
推薦 Go 語言的微服務框架 GoKit、GoMicro、go-zero、kratos,可以隨便選擇一個,理解其基本的用法、設計等等。其中 go-zero 和 kratos 是國內開源的,因此都有比較詳細的中文文檔。
這裏推薦一個在線學習的資料:
https://ewanvalentine.io/microservices-in-golang-part-1
手把手實現一個簡單的 Go 微服務項目,你可以通過這個項目來學習微服務的相關知識,並且有中文版。
最後,再提醒一下,文中提到的所有書籍,都可以在公衆號roseduan寫字的地方後臺回覆相應的關鍵字獲取:【算法、操作系統、網絡、數據庫、Go、微服務】,按需自取。
題圖:from wallheaven.cc
本文分享自微信公衆號 - 編程三分鐘(coding3min)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。