適合 Go 新手學(xué)習(xí)的開源項(xiàng)目——在 GitHub 學(xué)編程
作者:HelloGitHub-小魚干&鹵蛋
故事要從 2007 年說起。因?yàn)槭軌蛄?C 煎熬的 Google 首席軟件工程師 Rob Pike 召集 Robert Griesemer 和 Ken Thompson 兩位牛人,決定創(chuàng)造一種新語言來取代 C ,這就是 Go 的由來。
在 2009 年 11 月 10 日 Google 正式發(fā)行 Go 這一編程語言。Go 從 C 語言繼承了相似的表達(dá)式語法、控制流結(jié)構(gòu)、基礎(chǔ)數(shù)據(jù)類型、調(diào)用參數(shù)傳值、指針等很多思想,還有 C 語言一直所看中的編譯后機(jī)器碼的運(yùn)行效率以及和現(xiàn)有操作系統(tǒng)的無縫適配。
Golang 項(xiàng)目地址:https://GitHub.com/golang/go
經(jīng)過十多年的發(fā)展,截止北京時(shí)間:2020 年 11 月 17 日定稿時(shí) Go 的最新版本已經(jīng)到了 1.15.5。同時(shí)國外的 Twitter、Google、Netflix 等大廠和國內(nèi)的字節(jié)跳動(dòng)、騰訊、B 站等公司都在用 Go 開發(fā)他們的主要業(yè)務(wù),諸如 PingCAP 這一新興 NewSQL 數(shù)據(jù)庫廠商的主產(chǎn)品 TiDB 更是使用 Go 進(jìn)行開發(fā),并成為了 GitHub 上知名的 Go 語言開源項(xiàng)目??梢?Go 在互聯(lián)網(wǎng)公司的開發(fā)地位日漸重要,在開源社區(qū)也十分活躍。
那這個(gè)時(shí)候新手“上車”晚不晚?GitHub 上面有什么好玩、入門級(jí)的 Go 語言項(xiàng)目?
這里是 HelloGitHub 的《GitHub 上適合新手的開源項(xiàng)目》系列,共計(jì) 5 篇文章:
本期是 Go 篇,下文的開源項(xiàng)目選自 HelloGitHub 往期月刊。正如 Go 語言之父的 Rob Pike 所說的 Less is more or less is less,本文也本著這一原則:大道至簡(jiǎn)。下面的每一個(gè) Go 語言開源項(xiàng)目都能獨(dú)當(dāng)一面,成為新手的學(xué)習(xí)項(xiàng)目而且合在一起可以為你提供更為全面的 Go 認(rèn)知——1 1 > 2 。
Talking is cheap, Let's Go
Part One:師父領(lǐng)進(jìn)門
1.1 真正的入門指南:the-way-to-go_ZH_CN
GitHub 地址→https://github.com/unknwon/the-way-to-go_ZH_CN
《Go 入門指南》這本開源書籍是一位 Golang 的布道者(無聞)苦于當(dāng)時(shí)國內(nèi)沒有比較好的 Go 語言書籍,而著手翻譯的一本國外書籍《The Way to Go》。該書通過對(duì)官方的在線文檔、名人博客、書籍、相關(guān)文章以及演講的資料收集和整理,并結(jié)合我自身在軟件工程、編程語言和數(shù)據(jù)庫開發(fā)的授課經(jīng)驗(yàn),將這些零碎的知識(shí)點(diǎn)組織成系統(tǒng)化的概念和技術(shù)分類來進(jìn)行講解。
該書將從最基礎(chǔ)的概念講起,同時(shí)也會(huì)討論一些類似在應(yīng)用 goroutine 和 channel 時(shí)有多少種不同的模式,如何在 Go 語言中使用谷歌 API,如何操作內(nèi)存,如何在 Go 語言中進(jìn)行程序測(cè)試和如何使用模板來開發(fā) Web 應(yīng)用這些高級(jí)概念和技巧。
閱讀地址→https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md
1.2 從零開始學(xué) Go Web 編程:build-web-application-with-golang
GitHub 地址→https://github.com/astaxie/build-web-application-with-golang
《Go Web 編程》這本開源書籍,從零開始手把手教你 Go 的環(huán)境安裝和配置、基本語法再到 Go Web 開發(fā)的方方面面。可謂是一書在手,“天下”(Go Web)任我行。當(dāng)然書寫得再好,也是“師傅領(lǐng)進(jìn)門,修行靠個(gè)人啊!“
閱讀地址→https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/SUMMARY.md
Part Two:再上一層樓
2.1 七天用 Go 從零實(shí)現(xiàn)系列:7days-golang
GitHub 地址→https://github.com/geektutu/7days-golang
用 Go 分別寫一個(gè):Web 框架、分布式緩存、ORM 框架、RPC 框架的實(shí)戰(zhàn)教程。有些東西看懂了,不一定會(huì)用,會(huì)用了也不一定能自己搞出來。所以從零寫一個(gè)框架,了解其中的細(xì)節(jié),才能算上真正懂了吧。
在線閱讀→https://geektutu.com/post/gee.html
2.2 Go 學(xué)習(xí)之路:golang-developer-roadmap
GitHub 地址→https://github.com/Alikhll/golang-developer-roadmap
《Go 開發(fā)者路線圖》是一個(gè)成為 Go 開發(fā)的學(xué)習(xí)路線。一圖勝千言,這里選取這個(gè)項(xiàng)目是為了讓大家能快速了解 Go 所需學(xué)習(xí)的知識(shí)點(diǎn)和前進(jìn)的方向。
2.3 Go 高級(jí)編程:advanced-go-programming-book
GitHub 地址→https://github.com/chai2010/advanced-go-programming-book
《Go 語言高級(jí)編程》作為針對(duì)有一定 Go 基礎(chǔ)的進(jìn)階書籍,內(nèi)容涵蓋并發(fā)、GOC 編程、Go 匯編語言、RPC 實(shí)現(xiàn)、Web 框架實(shí)現(xiàn)、分布式系統(tǒng)等高階主題。該書的附錄也是一大亮點(diǎn),收錄了 Go 有趣的代碼片段、Go 常見坑。要想 Golang 玩得溜,得在 Go 高級(jí)編程下功夫 [手動(dòng)狗頭]
在線閱讀→https://chai2010.cn/advanced-go-programming-book/
Part Three:是時(shí)候展示真正的技術(shù)了
3.1 星圖:starcharts
GitHub 地址→https://github.com/caarlos0/starcharts
這個(gè)項(xiàng)目是通過可視化的方式展示 GitHub 上 star 的增長(zhǎng)曲線,也就生成是“星圖”。推薦這個(gè)項(xiàng)目主要是運(yùn)行簡(jiǎn)單和直觀的數(shù)據(jù)可視化,可以快速地感受到 Go 開源項(xiàng)目帶來的便利。我第一次玩這個(gè)項(xiàng)目的時(shí)候不會(huì) Go 語言,但是參考這個(gè)項(xiàng)目寫一個(gè) Python 版本的星圖,所以我想已經(jīng)入門 Go 的各位肯定也能看懂。
有的小伙伴可能會(huì)說我沒有開源項(xiàng)目、我的項(xiàng)目都沒有 star 我學(xué)這個(gè)項(xiàng)目沒用,我想了下確實(shí)是缺少些動(dòng)力。如果拋開 GitHub 的 star 元素,還有一個(gè)適用更多場(chǎng)景的 Go 數(shù)據(jù)可視化項(xiàng)目:go-echarts。來吧,感受下數(shù)據(jù)的律動(dòng)。
GitHub 地址→https://github.com/go-echarts/go-echarts
3.2 來 Chat 下:gochat
GitHub 地址→https://github.com/LockGit/gochat
gochat 是純 Go 實(shí)現(xiàn)的輕量級(jí)即時(shí)通訊系統(tǒng)。技術(shù)上各層之間通過 RPC 通訊,使用 Redis 作為消息存儲(chǔ)與投遞的載體,相對(duì) Kafka 操作起來更加方便快捷。各層之間基于 etcd 服務(wù)發(fā)現(xiàn),在擴(kuò)容部署時(shí)將會(huì)方便很多。架構(gòu)、目錄結(jié)構(gòu)清晰,文檔詳細(xì)。而且還提供了 Docker 一鍵構(gòu)建,安裝運(yùn)行都十分方便。
3.3 給!拿去用:annie
GitHub 地址→https://github.com/iawia002/annie
Go 編寫的下載快速、使用簡(jiǎn)單、程序純凈的視頻下載工具。支持嗶哩嗶哩、YouTube 等視頻網(wǎng)站。可作為前段時(shí)間被封禁:youtube-dl 的替代品(目前已重新上架),它真的很強(qiáng)大!先感受下 annie 帶來的便利,可能就有興趣去探究它的源碼啦。
$ annie -c cookies.txt https://www.bilibili.com/video/av20203945/ Site: 嗶哩嗶哩 bilibili.com Title: 【2018拜年祭單品】相遇day by day Type: video Stream: [default] ------------------- Quality: 高清 1080P60 Size: 220.65 MiB (231363071 Bytes) # download with: annie -f default "URL" 16.03 MiB / 220.65 MiB [==>----------------------------] 7.26% 9.65 MiB/s 19s
最后
推薦幾個(gè) GitHub 上的大佬:
- astaxie:謝大
- unknwon:無聞
- polaris1119:polarisxu,Go 語言中文網(wǎng)站長(zhǎng)
- appleboy、chai2010
需要自行訪問:https://github.com/ 用戶名
為什么沒寫人物介紹?我只是一個(gè)小小的 follower,了解的只是他們 GitHub 上的項(xiàng)目,其它的我都是道聽途說,所以不能亂寫。當(dāng)然還有很多在 GitHub 貢獻(xiàn)巨大的大佬們,沒寫到的不要打我!