本書首先介紹了Go語言的優(yōu)勢特性、安裝設(shè)置方法、工程結(jié)構(gòu)、標(biāo)準(zhǔn)命令和工具、語法基礎(chǔ)、數(shù)據(jù)類型以及流程控制方法, 接著闡述了與多進程編程和多線程編程有關(guān)的知識, 然后重點介紹了goroutine、channel以及Go提供的傳統(tǒng)同步方法, 之后通過一個完整實例--網(wǎng)絡(luò)爬蟲框架進一步闡述Go語言的哲學(xué)和理念, 同時分享作者在多年編程生涯中的一些見解和感悟。與上一版相比, 本書不僅基于Go 1.8對上一版進行了全面更新, 而且更深入地描繪了Go運行時系統(tǒng)的內(nèi)部機理, 并且大幅改進了示例代碼。
國內(nèi)知名Go語言技術(shù)布道者的再造之作
李響、謝孟軍、劉奇、左玥、肖德時、Googol Lee、田琪等業(yè)內(nèi)大咖傾心力捧
深入Go語言及其并發(fā)原理,挖出并發(fā)編程*佳實踐,百樣示例助你成為多核計算時代的Go程序高手
郝林
從業(yè)12年有余的軟件工匠,國內(nèi)知名的Go語言技術(shù)布道者,Go語言北京用戶組和GoHackers社群的發(fā)起人和組織者,多套免費在線Go語言教程的作者,深信Go語言在人工智能時代和機器人時代也能大放異彩的科技信徒。
第1章 初識Go語言 1
1.1 語言特性 1
1.2 安裝和設(shè)置 2
1.3 工程結(jié)構(gòu) 3
1.3.1 工作區(qū) 3
1.3.2 GOPATH 4
1.3.3 源碼文件 5
1.3.4 代碼包 8
1.4 標(biāo)準(zhǔn)命令簡述 11
1.5 問候程序 13
1.6 小結(jié) 14
第2章 語法概覽 15
2.1 基本構(gòu)成要素 15
2.1.1 標(biāo)識符 15
2.1.2 關(guān)鍵字 16
2.1.3 字面量 17
2.1.4 操作符 17
2.1.5 表達式 19
2.2 基本類型 20
2.3 高級類型 22
2.3.1 數(shù)組 23
2.3.2 切片 23
2.3.3 字典 24
2.3.4 函數(shù)和方法 25
2.3.5 接口 28
2.3.6 結(jié)構(gòu)體 29
2.4 流程控制 30
2.4.1 代碼塊和作用域 30
2.4.2 if語句 32
2.4.3 switch語句 32
2.4.4 for語句 34
2.4.5 defer語句 36
2.4.6 panic和recover 38
2.5 聊天機器人 40
2.6 小結(jié) 44
第3章 并發(fā)編程綜述 45
3.1 并發(fā)編程基礎(chǔ) 45
3.1.1 串行程序與并發(fā)程序 46
3.1.2 并發(fā)程序與并行程序 46
3.1.3 并發(fā)程序與并發(fā)系統(tǒng) 47
3.1.4 并發(fā)程序的不確定性 47
3.1.5 并發(fā)程序內(nèi)部的交互 47
3.2 多進程編程 48
3.2.1 進程 48
3.2.2 關(guān)于同步 55
3.2.3 管道 60
3.2.4 信號 65
3.2.5 socket 74
3.3 多線程編程 97
3.3.1 線程 98
3.3.2 線程的同步 107
3.4 多線程與多進程 125
3.5 多核時代的并發(fā)編程 126
3.6 小結(jié) 130
第4章 Go的并發(fā)機制 131
4.1 原理探究 131
4.1.1 線程實現(xiàn)模型 132
4.1.2 調(diào)度器 142
4.1.3 更多細(xì)節(jié) 158
4.2 goroutine 160
4.2.1 go語句與goroutine 160
4.2.2 主goroutine的運作 166
4.2.3 runtime包與goroutine 166
4.3 channel 169
4.3.1 channel的基本概念 169
4.3.2 單向channel 180
4.3.3 for語句與channel 184
4.3.4 select語句 185
4.3.5 非緩沖的channel 190
4.3.6 time包與channel 192
4.4 實戰(zhàn)演練:載荷發(fā)生器 198
4.4.1 參數(shù)和結(jié)果 199
4.4.2 基本結(jié)構(gòu) 201
4.4.3 初始化 206
4.4.4 啟動和停止 212
4.4.5 調(diào)用器和功能測試 221
4.5 小結(jié) 231
第5章 同 步 232
5.1 鎖的使用 232
5.1.1 互斥鎖 232
5.1.2 讀寫鎖 236
5.1.3 鎖的完整示例 238
5.2 條件變量 244
5.3 原子操作 247
5.3.1 增或減 247
5.3.2 比較并交換 249
5.3.3 載入 250
5.3.4 存儲 251
5.3.5 交換 251
5.3.6 原子值 252
5.3.7 應(yīng)用于實際 256
5.4 只會執(zhí)行一次 257
5.5 WaitGroup 258
5.6 臨時對象池 262
5.7 實戰(zhàn)演練——Concurrent Map 265
5.8 小結(jié) 280
第6章 網(wǎng)絡(luò)爬蟲框架設(shè)計和實現(xiàn) 281
6.1 網(wǎng)絡(luò)爬蟲與框架 281
6.2 功能需求和分析 283
6.3 總體設(shè)計 284
6.4 詳細(xì)設(shè)計 286
6.4.1 基本數(shù)據(jù)結(jié)構(gòu) 286
6.4.2 接口的設(shè)計 293
6.5 工具的實現(xiàn) 309
6.5.1 緩沖器 309
6.5.2 緩沖池 311
6.5.3 多重讀取器 317
6.6 組件的實現(xiàn) 318
6.6.1 內(nèi)部基礎(chǔ)接口 319
6.6.2 組件注冊器 321
6.6.3 下載器 323
6.6.4 分析器 325
6.6.5 條目處理管道 328
6.7 調(diào)度器的實現(xiàn) 329
6.7.1 基本結(jié)構(gòu) 329
6.7.2 初始化 331
6.7.3 啟動 333
6.7.4 停止 343
6.7.5 其他方法 344
6.7.6 總結(jié) 345
6.8 一個簡單的圖片爬蟲 346
6.8.1 概述 346
6.8.2 命令參數(shù) 346
6.8.3 初始化調(diào)度器 348
6.8.4 監(jiān)控調(diào)度器 354
6.8.5 啟動調(diào)度器 364
6.9 擴展與思路 365
6.10 本章小結(jié) 368
附錄A Go語言的學(xué)習(xí)資源 369
收起全部↑