適合 Go 新手學習的開源專案——在 GitHub 學程式設計

削微寒發表於2020-11-18

作者:HelloGitHub-小魚乾&滷蛋

故事要從 2007 年說起。因為受夠了 C++ 煎熬的 Google 首席軟體工程師 Rob Pike 召集 Robert Griesemer 和 Ken Thompson 兩位牛人,決定創造一種新語言來取代 C++,這就是 Go 的由來。

在 2009 年 11 月 10 日 Google 正式發行 Go 這一程式語言。Go 從 C 語言繼承了相似的表示式語法、控制流結構、基礎資料型別、呼叫引數傳值、指標等很多思想,還有 C 語言一直所看中的編譯後機器碼的執行效率以及和現有作業系統的無縫適配。

Golang 專案地址:https://github.com/golang/go

經過十多年的發展,截止北京時間:2020 年 11 月 17 日定稿時 Go 的最新版本已經到了 1.15.5。同時國外的 Twitter、Google、Netflix 等大廠和國內的位元組跳動、騰訊、B 站等公司都在用 Go 開發他們的主要業務,諸如 PingCAP 這一新興 NewSQL 資料庫廠商的主產品 TiDB 更是使用 Go 進行開發,併成為了 GitHub 上知名的 Go 語言開源專案。可見 Go 在網際網路公司的開發地位日漸重要,在開源社群也十分活躍。

那這個時候新手“上車”晚不晚?GitHub 上面有什麼好玩、入門級的 Go 語言專案?

這裡是 HelloGitHub 的《GitHub 上適合新手的開源專案》系列,共計 5 篇文章:

  1. C++ 篇
  2. Python 篇
  3. Go 篇
  4. Java 篇
  5. JavaScript 篇

本期是 Go 篇,下文的開源專案選自 HelloGitHub 往期月刊。正如 Go 語言之父的 Rob Pike 所說的 Less is more or less is less,本文也本著這一原則:大道至簡。下面的每一個 Go 語言開源專案都能獨當一面,成為新手的學習專案而且合在一起可以為你提供更為全面的 Go 認知——1 + 1 > 2 。

Talking is cheap, Let's Go ?

Part One:師父領進門

1.1 真正的入門指南:the-way-to-go_ZH_CN

GitHub 地址→https://github.com/unknwon/the-way-to-go_ZH_CN

《Go 入門指南》這本開源書籍是一位 Golang 的佈道者(無聞)苦於當時國內沒有比較好的 Go 語言書籍,而著手翻譯的一本國外書籍《The Way to Go》。該書通過對官方的線上文件、名人部落格、書籍、相關文章以及演講的資料收集和整理,並結合我自身在軟體工程、程式語言和資料庫開發的授課經驗,將這些零碎的知識點組織成系統化的概念和技術分類來進行講解。

該書將從最基礎的概念講起,同時也會討論一些類似在應用 goroutine 和 channel 時有多少種不同的模式,如何在 Go 語言中使用谷歌 API,如何操作記憶體,如何在 Go 語言中進行程式測試和如何使用模板來開發 Web 應用這些高階概念和技巧。

閱讀地址→https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/directory.md

1.2 從零開始學 Go Web 程式設計:build-web-application-with-golang

GitHub 地址→https://github.com/astaxie/build-web-application-with-golang

《Go Web 程式設計》這本開源書籍,從零開始手把手教你 Go 的環境安裝和配置、基本語法再到 Go Web 開發的方方面面。可謂是一書在手,“天下”(Go Web)任我行。當然書寫得再好,也是“師傅領進門,修行靠個人啊!“

閱讀地址→https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/SUMMARY.md

Part Two:再上一層樓

2.1 七天用 Go 從零實現系列:7days-golang

GitHub 地址→https://github.com/geektutu/7days-golang

用 Go 分別寫一個:Web 框架、分散式快取、ORM 框架、RPC 框架的實戰教程。有些東西看懂了,不一定會用,會用了也不一定能自己搞出來。所以從零寫一個框架,瞭解其中的細節,才能算上真正懂了吧。

線上閱讀→https://geektutu.com/post/gee.html

2.2 Go 學習之路:golang-developer-roadmap

GitHub 地址→https://github.com/Alikhll/golang-developer-roadmap

《Go 開發者路線圖》是一個成為 Go 開發的學習路線。一圖勝千言,選取這個專案是為了讓大家能快速瞭解 Go 所需學習的知識點和前進的方向。

2.3 Go 高階程式設計:advanced-go-programming-book

《Go 語言高階程式設計》作為針對有一定 Go 基礎的進階書籍,內容涵蓋併發、GOC 程式設計、Go 組合語言、RPC 實現、Web 框架實現、分散式系統等高階主題。該書的附錄也是一大亮點,收錄了 Go 有趣的程式碼片段、Go 常見坑。要想 Golang 玩得溜,得在 Go 高階程式設計下功夫 [手動狗頭]

GitHub 地址→https://github.com/chai2010/advanced-go-programming-book

線上閱讀→https://chai2010.cn/advanced-go-programming-book/

Part Three:是時候展示真正的技術了

3.1 星圖:starcharts

GitHub 地址→https://github.com/caarlos0/starcharts

這個專案是通過視覺化的方式展示 GitHub 上 star 的增長曲線,也就生成是“星圖”。推薦這個專案主要是執行簡單和直觀的資料視覺化,可以快速地感受到 Go 開源專案帶來的便利。我第一次玩這個專案的時候不會 Go 語言,但是參考這個專案寫一個 Python 版本的星圖,所以我想已經入門 Go 的各位肯定也能看懂。

有的小夥伴可能會說我沒有開源專案、我的專案都沒有 star 我學這個專案沒用,我想了下確實是缺少些動力。如果拋開 GitHub 的 star 元素,還有一個適用更多場景的 Go 資料視覺化專案:go-echarts。來吧,感受下資料的律動。

GitHub 地址→https://github.com/go-echarts/go-echarts

3.2 來 Chat 下:gochat

GitHub 地址→https://github.com/LockGit/gochat

gochat 是純 Go 實現的輕量級即時通訊系統。技術上各層之間通過 RPC 通訊,使用 Redis 作為訊息儲存與投遞的載體,相對 Kafka 操作起來更加方便快捷。各層之間基於 etcd 服務發現,在擴容部署時將會方便很多。架構、目錄結構清晰,文件詳細。而且還提供了 Docker 一鍵構建,安裝執行都十分方便。

3.3 給!拿去用:annie

GitHub 地址→https://github.com/iawia002/annie

Go 編寫的下載快速、使用簡單、程式純淨的視訊下載工具。支援嗶哩嗶哩、YouTube 等視訊網站。可作為前段時間被封禁:youtube-dl 的替代品(目前已重新上架),它真的很強大!先感受下 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

最後

推薦幾個 GitHub 上的大佬:

為什麼沒寫人物介紹?我只是一個小小的 follower,瞭解的只是他們 GitHub 上的專案,其它的我都是道聽途說,不能亂寫。當然還有很多在 GitHub 貢獻巨大的大佬們,沒寫到的不要打我呀!還不是因為你們不來 HelloGitHub 推薦專案嗎??

相關文章