前言 學習Go語言,抓住未來的機遇
●部分 快速入門Go語言
第1章 基礎入門:Hello, Go語言 2
1.1 Hello,World 2
1.2 程序結構分析 3
1.3 搭建Go語言開發(fā)環(huán)境 4
1.3.1 在Windows下安裝 4
1.3.2 在Linux下安裝 4
1.3.3 在macOS下安裝 4
1.3.4 安裝測試 4
1.3.5 環(huán)境變量設置 5
1.4 項目結構 5
1.5 編譯發(fā)布 6
1.6 跨平臺編譯 6
1.7 Go編輯器推薦 7
1.8 小結 8
第2章 數據類型:Go語言的基石 9
2.1 一個簡單示例 9
2.2 基礎類型 11
2.2.1 整型 11
2.2.2 浮點型 11
2.2.3 布爾型 12
2.2.4 字符串 12
2.2.5 零值 12
2.3 變量 13
2.3.1 變量簡短聲明 13
2.3.2 指針 13
2.3.3 賦值 13
2.4 常量 14
2.4.1 常量的定義 14
2.4.2 iota 14
2.5 字符串的使用 15
2.5.1 字符串和數字互轉 15
2.5.2 strings包 16
2.6 小結 16
第3章
控制結構:if、for、switch那些事兒 17
3.1 if條件語句 17
3.2 switch選擇語句 19
3.3 for循環(huán)語句 20
3.4 小結 22
第4章
集合類型:如何正確使用array、slice和map 23
4.1 數組 24
4.1.1 數組聲明 24
4.1.2 數組循環(huán) 25
4.2 切片 25
4.2.1 基于數組生成切片 26
4.2.2 切片的修改 26
4.2.3 切片的聲明 27
4.2.4 append函數 27
4.2.5 切片元素循環(huán) 28
4.3 映射 28
4.3.1 創(chuàng)建和初始化map 28
4.3.2 獲取和刪除map 29
4.3.3 遍歷map 29
4.3.4 獲取map的大小 30
4.4 string和[]byte 30
4.5 小結 31
第5章
函數和方法:如何區(qū)分函數和方法 32
5.1 函數 33
5.1.1 函數初探 33
5.1.2 函數聲明 33
5.1.3 多值返回 34
5.1.4 返回值命名 35
5.1.5 可變參數 36
5.1.6 包級函數 37
5.1.7 匿名函數和閉包 37
5.2 方法 39
5.2.1 不同于函數的方法 39
5.2.2 值和指針類型接收者 39
5.3 小結 40
第6章
struct和interface:隱式的接口實現(xiàn) 42
6.1 結構體 43
6.1.1 結構體的定義 43
6.1.2 聲明和使用 44
6.1.3 結構體的字段 44
6.2 接口 45
6.2.1 接口的定義 45
6.2.2 接口的實現(xiàn) 46
6.2.3 值和指針類型接收者 47
6.3 工廠函數 48
6.4 繼承和組合 49
6.5 類型斷言 50
6.6 小結 52
第7章
錯誤處理:如何更優(yōu)雅地處理程序異常和錯誤 53
7.1 錯誤 54
7.1.1 error接口 54
7.1.2 error工廠函數 55
7.1.3 自定義error 55
7.1.4 error斷言 56
7.2 錯誤嵌套 56
7.2.1 Error Wrapping功能 56
7.2.2 errors.Unwrap函數 57
7.2.3 errors.Is函數 57
7.2.4 errors.As函數 58
7.3 defer函數 58
7.4 panic函數 59
7.5 recover函數 60
7.6 小結 60
●第二部分 Go語言的高效并發(fā)
第8章
goroutine和channel:并發(fā)的基礎 62
8.1 什么是并發(fā) 63
8.2 進程和線程 63
8.2.1 進程 63
8.2.2 線程 64
8.3 協(xié)程 64
8.4 管道 65
8.4.1 聲明一個管道 65
8.4.2 無緩沖管道 66
8.4.3 有緩沖管道 66
8.4.4 關閉管道 67
8.4.5 單向管道 67
8.5 select channel示例 68
8.6 小結 69
第9章
同步原語:讓你對并發(fā)控制得心應手 70
9.1 資源競爭 70
9.2 同步原語 71
9.2.1 sync.Mutex 71
9.2.2 sync.RWMutex 72
9.2.3 sync.WaitGroup 73
9.2.4 sync.Once 75
9.2.5 sync.Cond 76
9.3 小結 77
第10章
Context:多協(xié)程并發(fā)控制神器 79
10.1 協(xié)程如何退出 79
10.2 Context的使用示例 81
10.3 Context詳解 82
10.4 Context樹 83
10.5 使用Context取消多個協(xié)程 84
10.6 Context傳值 85
10.7 Context使用原則 85
10.8 小結 86
第11章
并發(fā)模式:拿來即用的經驗總結 87
11.1 for select循環(huán)模式 87
11.2 select timeout模式 88
11.3 流水線模式 89
11.4 扇出和扇入模式 92
11.5 Future模式 94
11.6 小結 96
第12章
并發(fā)技巧:高效并發(fā)安全的字節(jié)池 97
12.1 字節(jié)切片 97
12.2 高效字節(jié)池 98
12.3 使用BytePoolCap 99
12.4
BytePoolCap與sync.Pool的
對比 99
12.5 小結 101
●第三部分 深入理解Go語言
第13章
指針詳解:什么情況下應該使用指針 104
13.1 什么是指針 104
13.2 指針的聲明和定義 105
13.3 指針的操作 107
13.4 指針參數 107
13.5 指針接收者 108
13.6 什么情況下使用指針 108
13.7 小結 109
第14章
參數傳遞:值、引用以及指針的區(qū)別 110
14.1 修改參數 111
14.2 值類型 112
14.3 指針類型 113
14.4 引用類型 114
14.4.1 map 114
14.4.2 chan 116
14.5 類型的零值 116
14.6 小結 117
第15章
內存分配:new和make該如何選擇 118
15.1 變量 118
15.1.1 變量的聲明 119
15.1.2 變量的賦值 119
15.2 new函數 120
15.3 變量初始化 121
15.3.1 指針變量初始化 122
15.