您的位置 首页 kreess

評點2021-2022年上市的那些Go語言新書

本文永久鏈接 – https://tonybai.com/2022/06/01/reviewing-those-new-go-language-books-coming-o

本文永久鏈接 – https://tonybai.com/2022/06/01/reviewing-those-new-go-language-books-coming-out-in-2021-2022

計算機科學與技術這個工業大類與傳統工業類別相比還很“年輕”,並且由於歷史原因,整個計算機科學與技術學科的奠基都是由歐美人完成的,因此但凡誕生一門新IT技術或新編程語言,我們首先參考的都是來自歐美的外文技術書籍(影印或翻譯)。

以Go為例,筆者最先接觸的Go技術書籍資料是《The Way To Go》:

這也是筆者早期學習Go語言時最喜歡翻看的一本書,也是我目前見到的、最全面詳實的講解Go語言的書籍瞭,可以說是Gopher們的第一本“Go語言百科全書”。可能是由於這本書出版太早瞭,等國內出版社意識到要引進Go語言方面的書籍的時候,這本書使用的Go版本已經太老瞭。不過,這本書中絕大部分例子依然可以在今天最新的Go編譯器下通過編譯並運行起來。

另外一本不得不提的就是由K&R C中的K:Brian W. Kernighan老爺子參與編寫的《The Go Programming Language》:

這本書模仿並致敬《The C Programming Language》的經典結構,從一個"hello, world"示例開始帶領大傢開啟Go語言之旅。作者行文十分精煉,字字珠璣,這與《The C Programming Language》的風格保持瞭高度一致。而且,書中的示例在淺顯易懂的同時,又極具實用性,還突出Go語言的特點(比如並發web爬蟲、並發非阻塞的緩存系統等)。讀完這本書後,你會有一種愛不釋手,馬上還要從頭再讀一遍的感覺,這也許這就是“Go語言聖經”的魅力吧!

不過,隨著Go語言在國內的紮根和廣泛應用,國內接納Go較早的一批Gopher以及國內大廠“身經百戰”的Gopher開始將Go語言沉淀下來,並陸續上線瞭自己的作品。從2020年開始,國內作者出版的Go語言相關書籍已經逐漸多瞭起來,並且質量也在逐漸提升。就像我在《Go語言第一課》 的加餐文章《我“私藏”的那些優質且權威的Go語言學習資料》中預測的那樣:將有更多Gopher加入Go技術書籍的寫作行列,從2021開始的3年,國內Go語言技術書籍也會迎來一波小高峰。

6.18購物節前夕,我就來簡單評點一下2021年至今出版的口碑還不錯的Go語言新書(按出版時間順序),大傢可以趁打折力度較大的窗口按需從電商平臺購買紙版書或電子書渠道購買電子書閱讀^_^。


1. 《Go語言底層原理剖析》 2021.8

Go語言是帶有GC與運行時的語言,這就意味著很多東西不是“表面”看到的那樣,比如string、切片、map等類型在運行時的表示與我們在源碼中看到的有很大不同。要想玩轉Go語言,不下沉到“原理”這一層還真不行。

《Go語言底層原理剖析》這本書顯然也是定位瞭那些對Go原理有述求的這部分gopher群體。書的作者鄭建勛老師是滴滴的高級研發工程師。大傢知道,滴滴公司內部使用Go技術棧實現的服務比例是很高的,因此這本書也是鄭老師在滴滴“摸爬滾打”後的實踐檢驗的沉淀與總結。

這本書從Go編譯構建原理起步,然後過渡到Go的幾種常見復合類型(數組、字符串、切片、map)的實現原理的講解,再到對Go核心語法函數、接口、異常處理的原理說明,最後是Go的精華,也是最難啃的部分:goroutine調度、內存分配與GC。如果從覆蓋的內容全面性上,應該說基本都包含到瞭。

筆者在微信讀書上對整本書做瞭閱讀,從閱讀體驗來看,鄭老師的技術十分紮實,講解也很到位。美中不足的是,有些內容剛剛引發你想繼續深入的興趣時,書籍內容卻在這裡戛然而止瞭。如果能繼續展開就更好瞭,也許這是基於書籍篇幅上的考量。

✩豆瓣評分:8.5 ✩微信讀書推薦值:57.7%

本書在豆瓣口碑與微信讀書推薦上存在一些分化,原因這個還不得而知。

2. 《Go語言設計與實現》 2021.11

《Go語言設計與實現》一書是作者左書祺(Draven)在其同名開源電子書《Go語言設計與實現》的基礎上進一步系統整理和豐富而成。左老師的開源電子書在國內Gopher圈內有著相當好的口碑,他擅長以精美插圖的方式對技術細節進行細致入微的講解,作者甚至還專門出過一篇《技術文章配圖指南》來說明其文章中插圖制作使用的工具以及方法。

和《Go語言底層原理剖析》一樣,《Go語言設計與實現》同樣聚焦在Go編譯器、類型系統與運行機制的原理層面,兩本書對原理的說明角度和風格各有特點,就看讀者喜歡哪種。更好的方法是主題閱讀,兩個相互參照的看。

編寫面向Go底層原理的書是有一定“風險”的,很容易隨著時間的流逝而變得“outdated”,這是因為Go語言還在快速演進中,其底層實現也在不斷變化,遠沒有Java那樣成熟,所以很難像神作《深入理解java虛擬機》那般“穩定”,需要不斷更新。在這一點上,紙板書反倒沒有開源電子書優勢明顯,後者可做到以快速持續的迭代更新。

不過筆者覺得:要想對一個語言機制的底層原理理解透徹,光是掌握其當前的實現機制還不夠,瞭解其實現機制的歷史演進過程將大有裨益,而上面的兩本書的價值恰恰還可以體現在這個方面,尤其是當書中的實現機制在將來過時的時候。

✩豆瓣評分:8.5 ✩微信讀書推薦值:未上架

3. 《Go語言精進之路》 2021.12.17

寫Go語言語法方面的書風險小,Go書籍的壽命都很長,這是因為Go1兼容性承諾的存在,這也是Go書籍作者的幸運。

《Go語言精進之路》是筆者的作品,該作品主要面向一個剛剛Go入門後的Go新手,就像副標題描述的那樣,聚焦於告訴一個Go入門新手如何能像Go開發團隊那樣寫出符合Go思維和語言慣例的高質量代碼。書中也有一部分底層原理的介紹,但這些介紹也都是為瞭配合主線的講解。由於是偏思維、方法與技巧方面的講解,裡面的絕大部分知識點,即使是幾年後,依然是有效的。這就像出版於2015年的Go語言聖經《The Go Programming language》目前看毫不過時一樣。

筆者自己的書不好自作點評,下面是近期一位讀者在weibo上主動at我的評價:

其他評價/評論大傢也可以在書籍的豆瓣頁面或微信讀書頁面上自行查看。

✩豆瓣評分:8.9 ✩微信讀書推薦值:84.1%

4. 《Go語言定制指南》 2022.2.1

《Go語言定制指南》是國內Go技術專傢柴樹衫老師既《Go語言高級編程》後的又一力作,這次內容更加聚焦:圍繞Go語法分析樹學習Go詞法分析、語法分析、語義分析以及中間代碼生成的原理,並基於Go語法樹對Go語言進行二次改造,基於Go語言語法裁剪出一個極小子集——凹語言,並實現其的解釋執行。

更具體來說,書中主要講解的是go/ast和go/types等Go編譯器相關包的用法,比如:結合Go語言的文法、語法與go/ast包輸出的語法樹的對應關系;使用go/types進行語義檢查的方法等。

這也是目前國內第一本以Go編譯器前端為中心的Go語言技術書籍,即便放眼全世界,這也是稀有的。如果你對Go編譯器的工作原理、對定制Go語言十分感興趣,那麼此書是你的不二之選。

不過編譯器和語言開發是門檻較高的領域,不免會出現“曲高和寡”的境遇,這本書註定是本已是小眾的Go社區中的小眾群體的菜。

✩豆瓣評分:暫無 ✩微信讀書推薦值:暫無

5. 引進版新書簡評

在豆瓣圖書搜索Go技術書籍,看到下面幾本剛剛出版不久(可能尚未上架)以及即將出版的幾本引進版的新書,這裡順便說說。

  • 《Go語言學習指南:慣例模式與編程實踐》 2022.4.29

這是O'Reilly出版社於2021年3月出版的《Learning Go: An Idiomatic Approach to Real-World Go Programming》的中譯版,中文版我還沒有來得及讀,不過原版我是粗略讀過的。這本書面向Go入門群體,同時結合一些實戰的例子,與《The Go Programming Language》的受眾群體相似度很高。

這本書(原版)整體質量很高,語言精煉,講解全面,更重要的是它似乎也是第一個包含Go泛型內容的Go入門書,隻不過出版時,Go泛型尚未正式發佈。今年3月份Go 1.18泛型落地後,該書作者還對泛型章節做瞭修訂,並在網上提供電子版供讀者下載。

  • 《用Go語言自制解釋器》 和《用Go語言自制編譯器》 2022.6.1

這兩本都是索斯藤·鮑爾(Thorsten Ball)在2018年自出版的書!作者使用Go語言手把手教你實現瞭一門類C語法的Monkey語言,從詞法分析、語法分析、建立語法樹並進行語法分析,到生成字節碼,並實現可以執行該字節碼的虛擬機,實現Monkey語言的真實執行。這本書在國外頗受好評。

作者在書中采用的是手寫詞法分析器和語法分析器的方式,而不是借助像ANTLR這樣的parser生成工具,這可以讓讀者更加深刻的理解和認知一門編程語言的實現過程,酷感十足。

6. 小結

我們看到,2021年來出品的Go技術書籍都獲得瞭不錯的口碑,這也說明國內Go語言的整體水準在提升,對於剛剛加入Go社區的小夥伴們,這是真金白銀般的好消息,看好書可以避免走彎路,節省大量時間與精力!

挑一本適合你的,該出手時就出手吧!


  • gopherdaily歸檔:https://github.com/bigwhite/gopherdaily
  • 編輯:Tony Bai (https://tonybai.com)
  • 郵件訂閱:https://gopher-daily.com/
  • 知乎Go進階專欄:https://www.zhihu.com/column/c_1352639051791454208

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部