Go語言結(jié)合了底層系統(tǒng)語言的能力以及現(xiàn)代語言的高級特性,旨在降低構(gòu)建簡單、可靠、高效軟件的門檻。本書向讀者提供一個專注、全面且符合語言習慣的視角。Go語言實戰(zhàn)同時關(guān)注語言的規(guī)范和實現(xiàn),涉及的內(nèi)容包括語法、類型系統(tǒng)、并發(fā)、管道、測試,以及其他一些主題。
即便不處理類似可擴展的Web 并發(fā)或者實時性能等復(fù)雜的系統(tǒng)編程問題,應(yīng)用程序開發(fā)也是一件非常困難的事情。盡管使用一些工具和框架也可以解決這些常見的問題,但Go 語言卻以一種更加自然且高效的方式正確處理了這類問題。由谷歌公司開發(fā)的Go 語言,為在基礎(chǔ)設(shè)施中非常依賴高性能服務(wù)的初創(chuàng)公司和大企業(yè)提供了足夠的能力。
Go語言實戰(zhàn)目標讀者是已經(jīng)有一定其他編程語言經(jīng)驗,想要開始學習Go 語言或者更深入了解Go 語言及其內(nèi)部機制的中級開發(fā)者。本書會提供一個專注、全面且符合習慣的視角。本書關(guān)注Go 語言的規(guī)范和實現(xiàn),涉及的內(nèi)容包括語法、Go 的類型系統(tǒng)、并發(fā)、通道和測試等主題。
Go語言實戰(zhàn) 主要內(nèi)容
● Go語言規(guī)范和實現(xiàn)。
● Go語言的類型系統(tǒng)。
● Go語言的數(shù)據(jù)結(jié)構(gòu)的內(nèi)部實現(xiàn)。
● 測試和基準測試。
Go語言實戰(zhàn)假設(shè)讀者是熟練使用其他語言(如Java、Ruby、Python、C# 或者C++)的開發(fā)者。
William Kennedy,是一位熟練的軟件開發(fā)者,也是博客GoingGo.Net的作者。
Brian Ketelsen和Erik St. Martin是全球Go語言大會GopherCon的組織者,也是Go語言框架Skynet的聯(lián)合作者。
李兆海,多年專注于后端分布式網(wǎng)絡(luò)服務(wù)開發(fā),曾使用過多個流行后端技術(shù)和相關(guān)架構(gòu)實踐,是Go語言和Docker的早期使用者和推廣者,《第1本Docker書》的譯者。作為項目技術(shù)負責人,成功開發(fā)了百萬用戶級直播系統(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章 快速開始一個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 導入 39
3.2.1 遠程導入 40
3.2.2 命名導入 40
3.3 函數(shù)init 41
3.4 使用Go的工具 42
3.5 進一步介紹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 對gb的介紹 50
3.8 小結(jié) 52
第4章 數(shù)組、切片和映射 53
4.1 數(shù)組的內(nèi)部實現(xiàn)和基礎(chǔ)功能 53
4.1.1 內(nèi)部實現(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)部實現(xiàn)和基礎(chǔ)功能 60
4.2.1 內(nèi)部實現(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)部實現(xiàn)和基礎(chǔ)功能 76
4.3.1 內(nèi)部實現(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 標準庫 96
5.4.2 實現(xiàn) 98
5.4.3 方法集 99
5.4.4 多態(tài) 103
5.5 嵌入類型 105
5.6 公開或未公開的標識符 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章 標準庫 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ù)端點 212
9.2 示例 217
9.3 基準測試 220
9.4 小結(jié) 224