2022 年 7 本最佳 Go 圖書(shū)
Go 圖書(shū)越來(lái)越多,有些不錯(cuò),有些不太好。我認(rèn)為如果你正在學(xué)習(xí) Go,你應(yīng)該盡可能廣泛地閱讀:即使是最好的 Go 圖書(shū)也只代表一種觀點(diǎn)。
但是,你必須知曉從哪里開(kāi)始,而且正如我的學(xué)生經(jīng)常問(wèn)“我應(yīng)該讀什么 Go 圖書(shū)?”,我認(rèn)為將我的建議收集在一個(gè)地方可能會(huì)有所幫助。這里我盡可能公正的描述,并說(shuō)明可以從中學(xué)到什么。
本文作者是 John Arundel,這里提到的書(shū)中,有三本是本文作者寫(xiě)的。
注意:以下圖書(shū)全部是國(guó)外的,雖然有些有中文翻譯。這里不代表國(guó)人出版的 Go 圖書(shū)就不好。
1、適合初學(xué)者的最佳 Go 入門(mén)書(shū)

For the Love of Go[1] 適合沒(méi)有 Go 或一般編程經(jīng)驗(yàn)的人。本書(shū)循序漸進(jìn)地方式介紹了 Go 中的測(cè)試驅(qū)動(dòng)開(kāi)發(fā) (TDD)[2],并引導(dǎo)讀者完成開(kāi)發(fā)完整 Go 包的過(guò)程,測(cè)試優(yōu)先。
本書(shū)介紹了 Go 最重要的基礎(chǔ)知識(shí):內(nèi)置類(lèi)型、結(jié)構(gòu)、map 和切片,并展示了如何將它們用作真實(shí)世界應(yīng)用程序(在線書(shū)店)的一部分。它涵蓋了基本的控制結(jié)構(gòu),如函數(shù)、循環(huán)和條件,通過(guò)簡(jiǎn)單的階段轉(zhuǎn)到方法和指針,并引導(dǎo)讀者了解一些有用的模式,如驗(yàn)證、未導(dǎo)出的類(lèi)型和iota常量。
整本書(shū)有幾十個(gè)小挑戰(zhàn)幫助讀者練習(xí)他們剛剛學(xué)到的東西,包括完整的和經(jīng)過(guò)測(cè)試的解決方案(也可以在 GitHub[3] 上找到)。
2、優(yōu)秀的 Go 圖書(shū)(Best single-volume Go book)

這是一本為有經(jīng)驗(yàn)開(kāi)發(fā)者準(zhǔn)備的 Go 圖書(shū)。如果你已經(jīng)熟悉指針和并發(fā)等編程概念,并且想知道如何將這些知識(shí)轉(zhuǎn)化為 Go,那么這本書(shū)很適合你。
它基本上涵蓋了 Go 的各個(gè)方面,即使不總是很深入,也很詳細(xì),雖然它不一定是我推薦學(xué)習(xí) Go 的第一本書(shū),但它是一個(gè)非常寶貴的參考資料。
3、最佳的中級(jí) Go 圖書(shū)

The Power of Go: Tools[4] 是為那些已經(jīng)學(xué)會(huì)了 Go 基本知識(shí),但現(xiàn)在想知道用它做什么的讀者準(zhǔn)備的。你如何設(shè)計(jì)包和 API?你如何測(cè)試不可測(cè)試的?好的軟件是什么樣的?什么是 Tao of Go[5],我們?nèi)绾问褂盟?/p>
本書(shū)以命令行工具為重點(diǎn),涵蓋了在 Go 中生成專(zhuān)業(yè)級(jí)軟件所需的一切:flag 和參數(shù)、文件和文件系統(tǒng)、命令、shell 和管道、JSON 和 YAML,甚至 API 客戶(hù)端。
最好的學(xué)習(xí)方式是邊做邊學(xué),這本書(shū)里有很多練習(xí)、測(cè)試和小項(xiàng)目供你學(xué)習(xí)。這本書(shū)固執(zhí)己見(jiàn),毫不妥協(xié),但不過(guò)激,偶爾也很有趣,書(shū)中用簡(jiǎn)潔的短語(yǔ)和經(jīng)驗(yàn)法則(“面向顯而易見(jiàn)的編程”)使課程令人難忘。
4、最佳的 Go 并發(fā)圖書(shū)

Concurrency in Go: Tools and Techniques for Developers[6],作者 Katherine Cox-Buday,對(duì)于任何使用 Go 編寫(xiě)并發(fā)程序的人來(lái)說(shuō)都是必不可少的讀物。這是一個(gè)高級(jí)主題,因此這本書(shū)不適合初學(xué)者,但它包含了有價(jià)值的信息、模式和實(shí)踐。
盡管 Go 對(duì)并發(fā)具有出色的內(nèi)置支持,但它的運(yùn)行水平非常低。實(shí)際上,構(gòu)建正確、可靠和高性能的并發(fā)程序是一件大事,并且需要經(jīng)驗(yàn)和專(zhuān)業(yè)知識(shí)。作者大量提供了這些內(nèi)容,概述了 Go 實(shí)現(xiàn)的理論 CSP 框架,并展示了它在實(shí)踐中的使用方式,并提供了許多詳細(xì)的示例和對(duì)幕后發(fā)生的事情的解釋。
這本書(shū)有中文翻譯版本:《Go語(yǔ)言并發(fā)之道》。
5、最佳的特定應(yīng)用 Go 圖書(shū)

Let's Go Further[7],由 Alex Edwards 撰寫(xiě),針對(duì)想要構(gòu)建專(zhuān)業(yè)級(jí) API 服務(wù)器的相當(dāng)有經(jīng)驗(yàn)的 Go 開(kāi)發(fā)人員。它本質(zhì)上由一個(gè)大型且功能完整的演示應(yīng)用程序組成,詳細(xì)解釋?zhuān)鹦泄ぷ?,逐個(gè)功能。
事實(shí)上,演示應(yīng)用程序?qū)⒋蟠笥兄趩?dòng)和運(yùn)行你自己的應(yīng)用程序,并讓你遠(yuǎn)離與規(guī)模、安全性或性能相關(guān)的任何重大問(wèn)題。本書(shū)還涵蓋了商業(yè)開(kāi)發(fā)人員需要了解的許多重要的非 Go 主題:數(shù)據(jù)庫(kù)、電子郵件、身份驗(yàn)證、構(gòu)建、部署等。
6、最佳的 Go 泛型圖書(shū)

Know Go: Generics[8] 是 Go 1.18+ 中新泛型特性的基本介紹。它用簡(jiǎn)單的語(yǔ)言解釋了泛型函數(shù)和類(lèi)型是什么,我們?yōu)槭裁葱枰鼈?,以及它們?cè)?Go 中是如何工作的。
這本書(shū)適合初學(xué)者和有經(jīng)驗(yàn)的程序員,對(duì)新特性和如何使用它們進(jìn)行了全面的介紹,包括類(lèi)型參數(shù)、約束、類(lèi)型近似、泛型容器類(lèi)型、新的slices和maps包以及基于 Map,Reduce和Filter 等的函數(shù)式編程。
本書(shū)展示了泛型在 Go 中的一些有趣應(yīng)用,探討了語(yǔ)言變化將如何影響我們編寫(xiě)程序的方式和熟悉的標(biāo)準(zhǔn)庫(kù) API,并回答了一些關(guān)于泛型的最常見(jiàn)問(wèn)題,例如“使用泛型對(duì)性能有什么影響?” 和“我什么時(shí)候應(yīng)該使用泛型函數(shù)而不是接口?”
7、最佳的高級(jí) Go 圖書(shū)

由 Bill Kennedy 和 Hoanh An 編寫(xiě)的 Ultimate Go Notebook[9] 首次以書(shū)本形式展示了著名的 Ardan Labs Go 培訓(xùn)大綱。除了涵蓋重要的 Go 主題(例如分析和跟蹤、錯(cuò)誤處理和并發(fā))外,本書(shū)還旨在教你像軟件工程師一樣思考。
對(duì)于那些可能有 2-3 年 Go 經(jīng)驗(yàn)的人來(lái)說(shuō),這是設(shè)計(jì)干凈和可維護(hù)的軟件、優(yōu)雅的 API 和 CRISP[10] 代碼的優(yōu)秀課程。這一次,“終極”標(biāo)題并非夸張:很難想到書(shū)中遺漏的任何重要內(nèi)容。每個(gè) Gopher 都應(yīng)該知道的模式和實(shí)踐的寶貴集合。
原文鏈接:https://bitfieldconsulting.com/golang/best-books
參考資料
For the Love of Go: https://bitfieldconsulting.com/books/love
[2]測(cè)試驅(qū)動(dòng)開(kāi)發(fā) (TDD): https://bitfieldconsulting.com/golang/tdd
[3]GitHub: https://github.com/bitfield/ftl-code
[4]The Power of Go: Tools: https://bitfieldconsulting.com/books/tools
[5]Tao of Go: https://bitfieldconsulting.com/golang/tao-of-go
[6]Concurrency in Go: Tools and Techniques for Developers: https://www.amazon.com/gp/product/1491941197?ie=UTF8&tag=cribbcorne-20&camp=1789&linkCode=xm2&creativeASIN=1491941197
[7]Let's Go Further: https://lets-go-further.alexedwards.net/
[8]Know Go: Generics: https://bitfieldconsulting.com/books/generics
[9]Ultimate Go Notebook: https://courses.ardanlabs.com/courses/ultimate-go-notebook
[10]CRISP: https://bitfieldconsulting.com/golang/crisp-code
推薦閱讀
