Go 學(xué)習(xí)路線(2022)

原文鏈接: Go 學(xué)習(xí)路線(2022)

Go 語(yǔ)言的發(fā)展越來(lái)越好了,很多大廠使用 Go 作為主要開發(fā)語(yǔ)言,也有很多人開始學(xué)習(xí) Go,準(zhǔn)備轉(zhuǎn) Go 開發(fā)。

那么,怎么學(xué)呢?

我發(fā)現(xiàn),在互聯(lián)網(wǎng)時(shí)代,學(xué)習(xí)的困難不是說(shuō)沒有資料,而是資料太多,不知道應(yīng)該看哪個(gè),從哪開始看。

所以,我整理了一份 Go 學(xué)習(xí)路線,這份學(xué)習(xí)路線不以數(shù)量取勝,努力做到精簡(jiǎn)。從基礎(chǔ)到進(jìn)階,從理論到實(shí)戰(zhàn),一共包括以下幾個(gè)內(nèi)容:

  • 入門教程
  • 進(jìn)階教程
  • 書籍推薦
  • Web 開發(fā)
  • 練手項(xiàng)目
  • 實(shí)用工具
  • 技術(shù)社區(qū)
Go 學(xué)習(xí)路線.png

這份學(xué)習(xí)路線還會(huì)不斷優(yōu)化更新,感興趣的同學(xué)可以收藏這個(gè)鏈接:https://github.com/yongxinz/gopher,第一時(shí)間獲取最新資源,如果能給個(gè) star 那就太謝謝了。

入門教程

Go 入門教程.png

Go 語(yǔ)言中文網(wǎng) - Go 語(yǔ)言入門教程

網(wǎng)站鏈接: http://c.biancheng.net/golang/

image

這套 Go 語(yǔ)言教程通俗易懂,深入淺出,既適合沒有基礎(chǔ)的讀者快速入門,也適合工作多年的程序員查閱知識(shí)點(diǎn)。

菜鳥教程 - Go 語(yǔ)言教程

網(wǎng)站鏈接: https://www.runoob.com/go/go-tutorial.html

image

這個(gè)網(wǎng)站就不需要多介紹了吧,很多編程語(yǔ)言的入門教程都可以在這里找到。平時(shí)寫代碼過程中,某個(gè)知識(shí)點(diǎn)忘了,也可以到這里查。

W3Cshcool - Go 教程

網(wǎng)站鏈接: https://www.w3cschool.cn/go/

image

也是一個(gè)綜合性的編程入門教程網(wǎng)站,資料很多,也都很基礎(chǔ)。

Go by Example

網(wǎng)站鏈接: https://gobyexample.com/

image

很多代碼示例,學(xué)習(xí)基礎(chǔ)知識(shí)的時(shí)候很實(shí)用??梢砸贿吙蠢碚?,一邊參考這個(gè)網(wǎng)站寫代碼,效果會(huì)更好。

地鼠文檔

網(wǎng)站鏈接: https://www.topgoer.cn/

image

可以說(shuō)是 Go 編程的導(dǎo)航網(wǎng)站了,收藏了很多 Go 學(xué)習(xí)資料。包括網(wǎng)站,書籍,開源庫(kù),開源項(xiàng)目等。

進(jìn)階教程

Go 進(jìn)階教程.png

mojotv 博客

網(wǎng)站鏈接: https://mojotv.cn/

image

很不錯(cuò)的博客,里面很多 Go 進(jìn)階文章,還有其他方面的技術(shù)文章,值得一讀。我試圖找了一下作者信息,但是沒找到。

煎魚 - Go 語(yǔ)言設(shè)計(jì)哲學(xué)

網(wǎng)站鏈接: https://golang3.eddycjy.com/

image

煎魚大佬的博客,結(jié)合官方資料和作者自己的理解,梳理出的一系列 Go 語(yǔ)言設(shè)計(jì)相關(guān)的理念和哲學(xué)的文章。

面向信仰編程 - Go 語(yǔ)言設(shè)計(jì)與實(shí)現(xiàn)

網(wǎng)站鏈接: https://draveness.me/golang/

image

左神的博客,內(nèi)容很深,想要成為大神的話,絕對(duì)要來(lái)看。

Go 夜讀

網(wǎng)站鏈接: https://talkgo.org/

這是一個(gè)由眾多資深 Gopher 組織的開源項(xiàng)目,主要是對(duì) Go 源碼進(jìn)行解讀。并且堅(jiān)持開源,將相關(guān)資源都上傳到了 GitHub。

書籍推薦

書單一共包含 10 本書,分為入門 5 本,進(jìn)階 5 本。我讀過其中 7 本,另外 3 本雖然沒讀過,但也是網(wǎng)上推薦比較多的。

雖然分了入門和進(jìn)階,但是很多書中這兩部分內(nèi)容是都包含了的。大家看的時(shí)候可以根據(jù)自己的情況,先打好基礎(chǔ),再進(jìn)行進(jìn)階。

有的書是開源的,可以直接在線閱讀,有的有電子書,大家可以在這里 GitHub 找到下載方式。如果條件允許的話,買正版是最好的。

Go 書籍推薦.png

入門

《Go語(yǔ)言趣學(xué)指南》

image

本書是一本面向 Go 語(yǔ)言初學(xué)者的書,內(nèi)容也比較淺,非常適合入門。

書中循序漸進(jìn)地介紹了使用 Go 語(yǔ)言必需知道的知識(shí),展示了非常多生動(dòng)有趣的例子,并通過提供大量練習(xí)來(lái)加深讀者對(duì)書中所述內(nèi)容的理解。

《Go 入門指南》

這本書的英文名稱叫《The Way to Go》,作者利用業(yè)余時(shí)間來(lái)進(jìn)行翻譯工作。在取得原作者 Ivo Balbaert 授權(quán)的情況下,將其開源。

在線閱讀: https://github.com/Unknwon/the-way-to-go_ZH_CN

《Go 語(yǔ)言編程》

image

本書以介紹 Go 語(yǔ)言特性為主,示例則盡量采用作者平常的實(shí)踐,而不是一個(gè)沒有太大實(shí)際意義的語(yǔ)法示范樣例。通過與 C++ 和 Java 做一個(gè)橫向比較,可以更直觀看出其設(shè)計(jì)理念的差別。

作者許式偉為原金山 WPS 首席架構(gòu)師、曾是盛大創(chuàng)新院研究員,目前是國(guó)內(nèi) Go 語(yǔ)言實(shí)踐圈子公認(rèn)的 Go 語(yǔ)言專家。參與本書寫作的幾位作者都是實(shí)際用 Go 語(yǔ)言開發(fā)的項(xiàng)目的開發(fā)人員,有較強(qiáng)的實(shí)戰(zhàn)經(jīng)驗(yàn)。

《Go 語(yǔ)言 101》

是一本著墨于 Go 語(yǔ)法語(yǔ)義以及運(yùn)行時(shí)相關(guān)知識(shí)點(diǎn)的編程指導(dǎo)書(Go 1.17 就緒)。 此書旨在盡可能地幫助 Go 程序員更深更全面地理解 Go 語(yǔ)言。

此書也搜集了 Go 語(yǔ)言和 Go 編程中的很多細(xì)節(jié),其中有一些在官方文檔中從未提及。

此書同時(shí)適合 Go 初學(xué)者和有一定經(jīng)驗(yàn)的 Go 程序員閱讀。

在線閱讀: https://gfw.go101.org/article/101.html

《Go 語(yǔ)言程序設(shè)計(jì)》

image

本書由作者 Kernighan 和谷歌公司 Go 團(tuán)隊(duì)主管 Alan Donovan 聯(lián)袂撰寫,是學(xué)習(xí) Go 語(yǔ)言的指南級(jí)書籍。內(nèi)容翔實(shí)全面,涵蓋了全部基礎(chǔ)內(nèi)容,值得一讀。

進(jìn)階

《Go 語(yǔ)言實(shí)戰(zhàn)》

image

相比于其他技術(shù)書籍,這本書很薄。顯然,這不是面面俱到,涵蓋所有知識(shí)點(diǎn)的一本書,但它直擊要點(diǎn)。

我在閱讀過程中,最大的感受就是,很多看基礎(chǔ)知識(shí)過程中碰到的,又很難通過搜索引擎找到答案的問題,在這里獲得了解答。

《Go Web 編程》

image

學(xué)語(yǔ)言不是目的,能夠使用這門語(yǔ)言來(lái)干活并掙到錢,才是目的。因此,不得不學(xué)一下 Go 在 Web 編程方面的應(yīng)用。

這本書是由黃健宏翻譯的,這位譯者,還著有《Redis 設(shè)計(jì)與實(shí)現(xiàn)》一書,書中深入淺出地分析了 Redis 所用的數(shù)據(jù)結(jié)構(gòu)和設(shè)計(jì)思想,屬實(shí)優(yōu)秀。

《Go 語(yǔ)言高級(jí)編程》

image

涵蓋 CGO、Go 匯編、RPC 實(shí)現(xiàn)、Web 框架、分布式系統(tǒng)等高階主題。書中章節(jié)之間沒有很強(qiáng)的關(guān)聯(lián)性,每個(gè)章節(jié)都是獨(dú)立的知識(shí),完全可以按需閱讀。

在線閱讀: https://github.com/chai2010/advanced-go-programming-book

《Go 語(yǔ)言學(xué)習(xí)筆記》

image

作者是雨痕大佬,2015 年第一屆 GopherChina 大會(huì)講師。

本書分上下兩卷:

上卷細(xì)致解析了語(yǔ)言規(guī)范相關(guān)細(xì)節(jié),便于讀者深入理解語(yǔ)言相關(guān)功能的使用方法和注意事項(xiàng)。

下卷則對(duì)運(yùn)行時(shí)源碼做出深度剖析,引導(dǎo)讀者透徹了解語(yǔ)言功能背后的支持環(huán)境和運(yùn)行體系,諸如內(nèi)存分配、垃圾回收和并發(fā)調(diào)度等。本書不適合編程初學(xué)入門,可供有實(shí)際編程經(jīng)驗(yàn)或正在使用 Go 工作的人群參考。

《Go 語(yǔ)言底層原理剖析》

image

本書使用淺顯易懂的語(yǔ)言與大量圖片深入介紹了 Go 語(yǔ)言編譯時(shí)、類型系統(tǒng)、語(yǔ)法特性、函數(shù)調(diào)用規(guī)范、并發(fā)編程、內(nèi)存管理與垃圾回收、運(yùn)行狀態(tài)監(jiān)控等模塊的使用方法和底層原理。

對(duì)于想要了解 Go 底層原理,閱讀源碼的同學(xué)來(lái)說(shuō),可以閱讀此書,但想要完全理解書中的內(nèi)容,并不是一件容易的事。

Web 開發(fā)

Go 是一種開源編程語(yǔ)言,可以輕松構(gòu)建簡(jiǎn)單、可靠和高效的軟件。也正因?yàn)樗?jiǎn)單、可靠、高效的特性,在使用 Go 語(yǔ)言開發(fā) Web 應(yīng)用時(shí)有以下的優(yōu)勢(shì):

  1. 更簡(jiǎn)單
  2. 更強(qiáng)的編譯能力
  3. 更高的性能
  4. 良好的 IDE 支持和調(diào)試功能
  5. 語(yǔ)法簡(jiǎn)單易上手

下面介紹 5 個(gè)開源 Web 框架,選擇它們的標(biāo)準(zhǔn)是:在 GitHub 上 star 多,維護(hù)積極,被使用的多并且查找資料方便。

Go Web 開發(fā).png

Gin

項(xiàng)目地址: https://github.com/gin-gonic/gin

一個(gè)完全由 Go 語(yǔ)言編寫而成的 HTTP Web 框架,提供了一個(gè)速度更快的、性能更高的 Go 語(yǔ)言 Web 開發(fā)框架。

這個(gè)框架對(duì)于初學(xué)者來(lái)說(shuō)很容易上手,而且在 Web 框架中,star 是最多的,使用的人也非常多。

Beego

項(xiàng)目地址: https://github.com/beego/beego

Beego 是一款由 Go 語(yǔ)言開發(fā)專家 Asta謝 開發(fā)的一款簡(jiǎn)單易用的企業(yè)級(jí) Go 應(yīng)用開發(fā)框架,具備全中文的官方網(wǎng)站和教程。

不同于其他框架語(yǔ)言,Beego 不僅僅提供圖文教程,還提供了視頻教程,這一點(diǎn)對(duì)國(guó)內(nèi)的開發(fā)人員來(lái)講是非常友好的。

Iris

項(xiàng)目地址: https://github.com/kataras/iris

Iris 框架在其官方網(wǎng)站上被描述為 Go 開發(fā)中最快的 Web 框架,并給出了多框架和多語(yǔ)言之間的性能對(duì)比。

如果你正在選擇一款性能不錯(cuò)、輕量級(jí)且簡(jiǎn)單易上手的 Go 語(yǔ)言 Web 開發(fā)框架,Iris 是一個(gè)不錯(cuò)的選擇。

Echo

項(xiàng)目地址: https://github.com/labstack/echo

Echo 是個(gè)快速的 HTTP 路由器(零動(dòng)態(tài)內(nèi)存分配),也是 Go 的微型 Web 框架。

其具備快速 HTTP 路由器、支持?jǐn)U展中間件,同時(shí)還支持靜態(tài)文件服務(wù)、WebSocket 以及支持制定綁定函數(shù)、制定相應(yīng)渲染函數(shù),并允許使用任意的 HTML 模版引擎。

GoFrame

項(xiàng)目地址: https://github.com/gogf/gf

GoFrame 是一款模塊化、高性能、企業(yè)級(jí)的 Go 基礎(chǔ)開發(fā)框架。GoFrame 不是一款 WEB/RPC 框架,而是一款通用性的基礎(chǔ)開發(fā)框架,是 Golang 標(biāo)準(zhǔn)庫(kù)的一個(gè)增強(qiáng)擴(kuò)展級(jí),包含通用核心的基礎(chǔ)開發(fā)組件。

優(yōu)點(diǎn)是實(shí)戰(zhàn)化、模塊化、文檔全面、模塊豐富、易用性高、通用性強(qiáng)、面向團(tuán)隊(duì)。

總體來(lái)說(shuō),這個(gè)項(xiàng)目具有完善的中文文檔和周邊開發(fā)庫(kù),活躍的 issue 討論區(qū),項(xiàng)目模塊化設(shè)計(jì)很好。

這 5 個(gè)開源項(xiàng)目各有優(yōu)劣,有的已經(jīng)被市場(chǎng)驗(yàn)證,使用廣泛;有的作為后起之秀,發(fā)展迅速。

大家可以挑選自己感興趣的來(lái)學(xué)習(xí)和使用。

練手項(xiàng)目

學(xué)完了理論,接下來(lái)就是實(shí)戰(zhàn),開始做項(xiàng)目。除了 Web 開發(fā)之外,還有很多方向可以選擇,比如 db,cache,im 等等。而且作為練手項(xiàng)目,不能太復(fù)雜,否則根本看不懂,反而打擊信心,起不到鍛煉的效果。

這里我選擇了 5 個(gè)項(xiàng)目,整體上來(lái)說(shuō),代碼量不是很大,難度也適中。而且不同項(xiàng)目可以學(xué)習(xí)到不同的技術(shù)點(diǎn),大家可以選擇自己感興趣的來(lái)嘗試。

Go 練手項(xiàng)目.png

id-maker

項(xiàng)目地址: https://github.com/yongxinz/id-maker

Go 開發(fā)的一款分布式唯一 ID 生成系統(tǒng)。

代碼量少,項(xiàng)目整體難度小,通過這個(gè)項(xiàng)目可以學(xué)習(xí)到 httpServer,gRPC 相關(guān)知識(shí)。

cache2go

項(xiàng)目地址: https://github.com/muesli/cache2go

比較簡(jiǎn)單的一個(gè)緩存庫(kù),代碼量很少,適合新手學(xué)習(xí)。通過這個(gè)項(xiàng)目可以學(xué)習(xí)到鎖、goroutine 等知識(shí)。

rosedb

項(xiàng)目地址: https://github.com/flower-corp/rosedb

rosedb 是一個(gè)穩(wěn)定、高性能、快速、內(nèi)嵌的 k-v 存儲(chǔ)引擎,支持多種數(shù)據(jù)結(jié)構(gòu),包含 String、List、Hash、Set、Sorted Set,接口名稱風(fēng)格和 Redis 類似。

項(xiàng)目使用純 Golang 實(shí)現(xiàn),Go 語(yǔ)言的絕大部分基礎(chǔ)知識(shí)點(diǎn)都包含了,相信一定是學(xué)習(xí)和鞏固 Golang 的很不錯(cuò)的項(xiàng)目。

除此之外,代碼中還有一些數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),所以同時(shí)也能學(xué)習(xí)一下數(shù)據(jù)結(jié)構(gòu)的知識(shí)。

wechat-go

項(xiàng)目地址: https://github.com/songtianyi/wechat-go

這是微信 Web 版 API 的 Go 語(yǔ)言實(shí)現(xiàn),模擬微信網(wǎng)頁(yè)版的登錄/聯(lián)系人/消息收發(fā)等功能,可以完全接管微信收到的消息,并定制自己的發(fā)送內(nèi)容。

我覺得這個(gè)項(xiàng)目還是挺有趣的,用來(lái)操作一下微信,能夠體會(huì)到更多學(xué)習(xí)的樂趣。

gin-vue-admin

項(xiàng)目地址: https://github.com/flipped-aurora/gin-vue-admin

gin-vue-admin 是一個(gè)使用 gin + vue 進(jìn)行極速開發(fā)的全棧后臺(tái)管理系統(tǒng),后臺(tái)使用 gin 框架,前端主要使用 vue。

項(xiàng)目的目錄結(jié)構(gòu)非常清晰,包名語(yǔ)義化,能夠幫助你快速上手學(xué)習(xí)。

這個(gè)項(xiàng)目還使用到了一些流行的 Go 開源庫(kù)及中間件,例如:

  • gin:最流行的 Go 語(yǔ)言 Web 框架
  • gorm:數(shù)據(jù)庫(kù)操作中間件
  • zap:uber 開源的 Go 語(yǔ)言日志庫(kù)
  • redis:k-v 緩存

除此之外,這個(gè)項(xiàng)目還有詳細(xì)的中文文檔,并且配套教學(xué)視頻,值得學(xué)習(xí)。

實(shí)用工具

隨著編輯器的逐漸強(qiáng)大,有一些小而美的網(wǎng)站的功能已經(jīng)被編輯器取代了,但依舊不妨礙我喜歡它們,下面都推薦給大家。

Go 實(shí)用工具.png

JSON to Go struct

網(wǎng)站鏈接: https://mholt.github.io/json-to-go/

YAML to Go struct

網(wǎng)站鏈接: https://zhwt.github.io/yaml-to-go/

Table to Go struct

網(wǎng)站鏈接: https://github.com/gohouse/converter

使用方式分兩種,分別是命令行調(diào)用和寫 Go 代碼。兩種方式都不復(fù)雜,具體見這篇文章:推薦三個(gè)實(shí)用的 Go 開發(fā)工具

Rego

網(wǎng)站鏈接: http://regoio.herokuapp.com/

image

Go 語(yǔ)言正則在線測(cè)試。

plantUML

網(wǎng)站鏈接: https://www.dumels.com/

image

這個(gè)網(wǎng)站可以分析一個(gè) Go 項(xiàng)目,然后生成接口和結(jié)構(gòu)體的 UML 圖。有了這個(gè)圖之后,基本上也就對(duì)項(xiàng)目整體關(guān)系有了一個(gè)基本概念,再讀源碼的話,相對(duì)來(lái)說(shuō)會(huì)容易一些。

具體見這篇文章:讀 Go 源碼,可以試試這個(gè)工具

Playground

網(wǎng)站鏈接: https://go.dev/play/

image

Go 語(yǔ)言代碼在線運(yùn)行。

技術(shù)社區(qū)

現(xiàn)在的話,技術(shù)社區(qū)可能看的人越來(lái)越少了,也不那么活躍。從我個(gè)人的經(jīng)驗(yàn)來(lái)說(shuō),也是這樣,有什么問題直接谷歌了,基本不會(huì)先到技術(shù)社區(qū)去查去問。

Go 技術(shù)社區(qū).png

在這里推薦幾個(gè)我覺得還不錯(cuò)的,閑暇時(shí)間可以逛逛看。

除此之外,還有兩個(gè)網(wǎng)站很重要,就是 GitHub 和 stackoverflow。保守估計(jì),這兩個(gè)網(wǎng)站撐起了程序員一半的工資。

以上就是本文的全部?jī)?nèi)容,希望各位大佬學(xué)的開心。

文中涉及到的全部資源,包括電子書,腦圖等都會(huì)開源到 GitHub。并且,這個(gè)學(xué)習(xí)路線還會(huì)不停維護(hù)和更新,大家也可以關(guān)注我的 GitHub,這樣就可以第一時(shí)間獲取最新資源。

如果覺得本文還可以的話,歡迎點(diǎn)贊,分享,感謝支持。


開源地址:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容