Go語言結(jié)合了底層系統(tǒng)語言的能力以及現(xiàn)代語言的高級(jí)特性,旨在降低構(gòu)建簡單、可靠、高效軟件的門檻。本書向讀者提供一個(gè)專注、全面且符合語言習(xí)慣的視角。Go語言實(shí)戰(zhàn)同時(shí)關(guān)注語言的規(guī)范和實(shí)現(xiàn),涉及的內(nèi)容包括語法、類型系統(tǒng)、并發(fā)、管道、測試,以及其他一些主題。
即便不處理類似可擴(kuò)展的Web 并發(fā)或者實(shí)時(shí)性能等復(fù)雜的系統(tǒng)編程問題,應(yīng)用程序開發(fā)也是一件非常困難的事情。盡管使用一些工具和框架也可以解決這些常見的問題,但Go 語言卻以一種更加自然且高效的方式正確處理了這類問題。由谷歌公司開發(fā)的Go 語言,為在基礎(chǔ)設(shè)施中非常依賴高性能服務(wù)的初創(chuàng)公司和大企業(yè)提供了足夠的能力。
Go語言實(shí)戰(zhàn)目標(biāo)讀者是已經(jīng)有一定其他編程語言經(jīng)驗(yàn),想要開始學(xué)習(xí)Go 語言或者更深入了解Go 語言及其內(nèi)部機(jī)制的中級(jí)開發(fā)者。本書會(huì)提供一個(gè)專注、全面且符合習(xí)慣的視角。本書關(guān)注Go 語言的規(guī)范和實(shí)現(xiàn),涉及的內(nèi)容包括語法、Go 的類型系統(tǒng)、并發(fā)、通道和測試等主題。
Go語言實(shí)戰(zhàn) 主要內(nèi)容
● Go語言規(guī)范和實(shí)現(xiàn)。
● Go語言的類型系統(tǒng)。
● Go語言的數(shù)據(jù)結(jié)構(gòu)的內(nèi)部實(shí)現(xiàn)。
● 測試和基準(zhǔn)測試。
Go語言實(shí)戰(zhàn)假設(shè)讀者是熟練使用其他語言(如Java、Ruby、Python、C# 或者C++)的開發(fā)者。
William Kennedy,是一位熟練的軟件開發(fā)者,也是博客GoingGo.Net的作者。
Brian Ketelsen和Erik St. Martin是全球Go語言大會(huì)GopherCon的組織者,也是Go語言框架Skynet的聯(lián)合作者。
李兆海,多年專注于后端分布式網(wǎng)絡(luò)服務(wù)開發(fā),曾使用過多個(gè)流行后端技術(shù)和相關(guān)架構(gòu)實(shí)踐,是Go語言和Docker的早期使用者和推廣者,《第1本Docker書》的譯者。作為項(xiàng)目技術(shù)負(fù)責(zé)人,成功開發(fā)了百萬用戶級(jí)直播系統(tǒng)。
第1章 關(guān)于Go語言的介紹 1
1.1 用Go解決現(xiàn)代編程難題 2
1.1.1 開發(fā)速度 2
1.1.2 并發(fā) 3
1.1.3 Go語言的類型系統(tǒng) 5
1.1.4 內(nèi)存管理 7
1.2 你好,Go 7
1.3 小結(jié) 8
第2章 快速開始一個(gè)Go程序 9
2.1 程序架構(gòu) 9
2.2 main包 11
2.3 search包 13
2.3.1 search.go 13
2.3.2 feed.go 21
2.3.3 match.go default.go 24
2.4 RSS匹配器 30
2.5 小結(jié) 36
第3章 打包和工具鏈 37
3.1 包 37
3.1.1 包名慣例 38
3.1.2 main包 38
3.2 導(dǎo)入 39
3.2.1 遠(yuǎn)程導(dǎo)入 40
3.2.2 命名導(dǎo)入 40
3.3 函數(shù)init 41
3.4 使用Go的工具 42
3.5 進(jìn)一步介紹Go開發(fā)工具 44
3.5.1 go vet 44
3.5.2 Go代碼格式化 45
3.5.3 Go語言的文檔 45
3.6 與其他Go開發(fā)者合作 48
3.7 依賴管理 48
3.7.1 第三方依賴 49
3.7.2 對(duì)gb的介紹 50
3.8 小結(jié) 52
第4章 數(shù)組、切片和映射 53
4.1 數(shù)組的內(nèi)部實(shí)現(xiàn)和基礎(chǔ)功能 53
4.1.1 內(nèi)部實(shí)現(xiàn) 53
4.1.2 聲明和初始化 54
4.1.3 使用數(shù)組 55
4.1.4 多維數(shù)組 58
4.1.5 在函數(shù)間傳遞數(shù)組 59
4.2 切片的內(nèi)部實(shí)現(xiàn)和基礎(chǔ)功能 60
4.2.1 內(nèi)部實(shí)現(xiàn) 60
4.2.2 創(chuàng)建和初始化 61
4.2.3 使用切片 63
4.2.4 多維切片 74
4.2.5 在函數(shù)間傳遞切片 75
4.3 映射的內(nèi)部實(shí)現(xiàn)和基礎(chǔ)功能 76
4.3.1 內(nèi)部實(shí)現(xiàn) 76
4.3.2 創(chuàng)建和初始化 78
4.3.3 使用映射 79
4.3.4 在函數(shù)間傳遞映射 81
4.4 小結(jié) 82
第5章 Go語言的類型系統(tǒng) 83
5.1 用戶定義的類型 83
5.2 方法 87
5.3 類型的本質(zhì) 90
5.3.1 內(nèi)置類型 91
5.3.2 引用類型 91
5.3.3 結(jié)構(gòu)類型 93
5.4 接口 95
5.4.1 標(biāo)準(zhǔn)庫 96
5.4.2 實(shí)現(xiàn) 98
5.4.3 方法集 99
5.4.4 多態(tài) 103
5.5 嵌入類型 105
5.6 公開或未公開的標(biāo)識(shí)符 113
5.7 小結(jié) 121
第6章 并發(fā) 122
6.1 并發(fā)與并行 122
6.2 goroutine 125
6.3 競爭狀態(tài) 132
6.4 鎖住共享資源 135
6.4.1 原子函數(shù) 135
6.4.2 互斥鎖 138
6.5 通道 140
6.5.1 無緩沖的通道 141
6.5.2 有緩沖的通道 146
6.6 小結(jié) 149
第7章 并發(fā)模式 150
7.1 runner 150
7.2 pool 158
7.3 work 168
7.4 小結(jié) 174
第8章 標(biāo)準(zhǔn)庫 176
8.1 文檔與源代碼 177
8.2 記錄日志 178
8.2.1 log包 179
8.2.2 定制的日志記錄器 182
8.2.3 結(jié)論 186
8.3 編碼 解碼 187
8.3.1 解碼JSON 187
8.3.2 編碼JSON 192
8.3.3 結(jié)論 193
8.4 輸入和輸出 193
8.4.1 Writer和Reader接口 194
8.4.2 整合并完成工作 195
8.4.3 簡單的curl 199
8.4.4 結(jié)論 200
8.5 小結(jié) 200
第9章 測試和性能 201
9.1 單元測試 201
9.1.1 基礎(chǔ)單元測試 202
9.1.2 表組測試 205
9.1.3 模仿調(diào)用 208
9.1.4 測試服務(wù)端點(diǎn) 212
9.2 示例 217
9.3 基準(zhǔn)測試 220
9.4 小結(jié) 224