內容提要
《Go語言編程入門與實戰技巧》從內容上分為三大部分,第一部分主要介紹Go語言的基礎知識,包括Go語言的安裝和開發工具,介紹了Go語言的特性與適合的場景,然後講解了Go語言的程式結構和數據類型,並針對函式和一些關鍵字的用法與數據類型的調用原理做了闡述。第二部分介紹了Go語言數據結構和標準庫,結合實際套用場景探討了日常生產環境會遇到的問題與解決辦法。第三部分主要介紹Go語言的測試工具和用法,並重點講解了Go語言的記憶體管理機制,深入理解Go語言的設計哲學,了解Go語言底層的記憶體管理和並發機制,為更進一步的學習打下堅實的基礎。
《Go語言編程入門與實戰技巧》適合對計算機編程尤其是對Go語言編程感興趣的新手作為入門教程閱讀,還適合想在Web開發領域有所發展的程式設計師學習
目錄
第1章 認識Go語言 1
1.1 Go語言簡介 1
1.1.1 Go語言簡史 1
1.1.2 Go語言特性 2
1.1.3 誰適合使用Go語言 2
1.2 Go語言的開發環境部署 3
1.2.1 Go語言環境變數 3
1.2.2 在Linux上安裝Go語言環境 3
1.2.3 在Mac OS上安裝Go語言環境 5
1.2.4 在Windows上安裝Go語言環境 5
1.3 Go語言的基本命令及使用 5
1.3.1 GOROOT結構 6
1.3.2 GOPATH結構 7
1.3.3 Go語言命令行參數 8
1.3.4 第一個Go語言程式 12
1.4 Go語言的開發工具 14
1.4.1 Code/Atom 14
1.4.2 VIM-Go 17
1.4.3 Gogland 18
1.4.4 LiteIDE 18
1.4.5 Cloud IDE 19
1.5 本章小結 23
第2章 程式結構 24
2.1 Go語言程式元素 24
2.1.1 標識符 24
2.1.2 關鍵字 25
2.1.3 字面量 25
2.1.4 分隔設定 25
2.1.5 運算符 26
2.1.6 注釋 27
2.2 Go語言基本概念 28
2.2.1 常量 28
2.2.2 變數 32
2.3 本章小結 37
第3章 基礎數據類型 38
3.1 整型 39
3.1.1 整型的表示 39
3.1.2 整型的運算 39
3.2 浮點型 41
3.2.1 浮點型的表示 41
3.2.2 浮點型的運算 42
3.2.3 複數 42
3.3 字元與字元串 44
3.3.1 字元串的表示 44
3.3.2 操作字元串 46
3.3.3 字元串格式化 60
3.4 布爾型 61
3.4.1 布爾型的表示 61
3.4.2 布爾型的運算 62
3.5 基本數據類型的擴展 63
3.5.1 強制類型轉換 63
3.5.2 自定義類型 64
3.5.3 類型別名 64
3.5.4 指針 65
3.6 本章小結 69
第4章 流程控制 70
4.1 條件語句 70
4.1.1 if判斷 71
4.1.2 if-else判斷 71
4.1.3 else-if判斷 73
4.1.4 初始化子語句 74
4.2 選擇語句 75
4.2.1 switch語句 75
4.2.2 switch初始化語句 78
4.2.3 select語句 79
4.3 循環語句 80
4.3.1 for的子語句 81
4.3.2 range子語句 82
4.4 延遲語句 84
4.5 標籤 87
4.5.1 break 87
4.5.2 continue 89
4.5.3 goto 90
4.6 本章小結 91
第5章 函式 92
5.1 認識函式 92
5.1.1 函式的聲明 92
5.1.2 函式的參數 93
5.1.3 函式的返回值 94
5.2 函式的基礎 95
5.2.1 多返回值 96
5.2.2 函式作為參數 97
5.2.3 函式作為類型 98
5.2.4 可變參數 99
5.2.5 匿名函式與閉包 102
5.2.6 遞歸函式 106
5.2.7 內置函式 108
5.3 函式進階 108
5.3.1 參數傳遞機制 108
5.3.2 defer與跟蹤 111
5.3.3 錯誤與恢復 116
5.4 本章小結 122
第6章 複合數據類型 123
6.1 數組 123
6.1.1 聲明數組 123
6.1.2 訪問與修改 124
6.1.3 多維數組 126
6.1.4 將數組傳遞給函式 127
6.2 切片 128
6.2.1 創建數組切片 129
6.2.2 切片的使用 131
6.2.3 多維切片 137
6.2.4 將切片傳遞給函式 137
6.3 映射 138
6.3.1 映射的實現 138
6.3.2 映射的創建 139
6.3.3 映射的使用 139
6.3.4 將映射傳遞給函式 141
6.4 本章小結 142
第7章 包 144
7.1 包的基礎 144
7.1.1 包的結構 146
7.1.2 包的導入 147
7.1.3 包的使用 153
7.1.4 Go語言工具箱 154
7.2 自定義包 156
7.2.1 包的製作 157
7.2.2 特定平台的代碼 157
7.2.3 godoc生成文檔 158
7.2.4 包的打包與發布 159
7.2.5 自定義包的導入 164
7.3 本章小結 165
第8章 結構體與方法 166
8.1 結構體 166
8.1.1 結構體定義 166
8.1.2 結構體使用 172
8.1.3 帶標籤的結構體 175
8.1.4 匿名欄位和內嵌結構體 176
8.2 類型系統 179
8.2.1 用戶自定義類型 179
8.2.2 值語義和引用語義 182
8.3 方法 184
8.3.1 方法聲明 184
8.3.2 為類型添加方法 187
8.3.3 工廠方法創建結構體 188
8.3.4 基於指針對象的方法 190
8.3.5 方法值和方法表達式 191
8.3.6 方法和未導出欄位 193
8.3.7 嵌入類型的方法和繼承 194
8.4 本章小結 197
第9章 接口與反射 198
9.1 接口 198
9.1.1 接口是什麼 199
9.1.2 接口類型與約定 204
9.1.3 接口實現 208
9.1.4 嵌套接口 210
9.1.5 接口賦值 211
9.1.6 接口查詢 213
9.1.7 接口組合 214
9.2 反射 215
9.2.1 方法和類型的反射 215
9.2.2 通過反射修改設定值 216
9.2.3 反射結構 218
9.2.4 Printf和反射 220
9.3 本章小結 222
第10章 並發編程 223
10.1 並發編程基礎 223
10.1.1 並發與並行 223
10.1.2 指定使用核心數 225
10.2 協程(goroutine) 227
10.2.1 協程基礎 228
10.2.2 協程間通信 229
10.3 通道(channel) 231
10.3.1 基本語法 232
10.3.2 select 232
10.3.3 緩衝機制 233
10.3.4 逾時和計時器 234
10.3.5 channel的傳遞 235
10.3.6 單向channel 236
10.3.7 關閉channel 237
10.4 並發進階 237
10.4.1 多核並行化 237
10.4.2 協程同步 239
10.4.3 協程和恢復 242
10.5 本章小結 243
第11章 網路編程 244
11.1 Socket編程 244
11.1.1 什麼是Socket 244
11.1.2 Dial()函式 246
11.1.3 ICMP示例 247
11.1.4 TCP Socket 249
11.1.5 UDP Socket 253
11.2 HTTP編程 255
11.2.1 HTTP客戶端 255
11.2.2 HTTP伺服器端 260
11.3 RPC編程 262
11.3.1 Go RPC 263
11.3.2 HTTP RPC 263
11.3.3 TCP RPC 266
11.3.4 JSON RPC 268
11.3.5 RPC接口 271
11.4 資料庫 272
11.4.1 database/sql接口 272
11.4.2 使用MySQL資料庫 277
11.4.3 使用SQLite資料庫 280
11.4.4 使用PostgreSQL資料庫 282
11.4.5 NoSQL資料庫操作 286
11.5 Go語言使用Cookie 287
11.5.1 設定Cookie 287
11.5.2 讀取Cookie 288
11.6 本章小結 288
第12章 I/O編程 289
12.1 輸入/輸出 289
12.1.1 io:基本I/O接口 289
12.1.2 fmt:格式化I/O 292
12.1.3 文本處理 298
12.2 檔案系統 298
12.2.1 os:系統功能實現 298
12.2.2 path:兼容路徑操作 299
12.3 數據結構與算法 303
12.3.1 排序 304
12.3.2 container 310
12.4 本章小結 314
第13章 檔案處理 315
13.1 檔案操作 315
13.1.1 創建檔案與查看狀態 316
13.1.2 重命名與移動 319
13.1.3 打開與關閉 319
13.1.4 刪除與截斷 321
13.1.5 讀寫檔案 321
13.1.6 許可權控制 325
13.1.7 檔案連結 328
13.2 XML處理 330
13.2.1 解析XML 330
13.2.2 生成XML 333
13.3 JSON處理 336
13.3.1 解析JSON 336
13.3.2 生成JSON 338
13.4 日誌記錄 340
13.4.1 Logrus 341
13.4.2 Seelog 342
13.5 壓縮 343
13.5.1 打包與解包 343
13.5.2 壓縮與解壓 345
13.6 本章小結 347
第14章 安全與測試 348
14.1 安全 348
14.1.1 安全相關的基礎概念 348
14.1.2 通信安全 350
14.2 測試 354
14.2.1 單元測試 354
14.2.2 基準測試 362
14.3 本章小結 368
第15章 記憶體管理 369
15.1 記憶體分配 369
15.1.1 記憶體管理基本概念 369
15.1.2 逃逸分析 373
15.2 TCMalloc 376
15.2.1 整體結構 377
15.2.2 小記憶體分配 378
15.2.3 CentralCache 379
15.2.4 大記憶體分配 381
15.3 Mspan(記憶體管理器) 384
15.4 垃圾回收 398
15.4.1 標記清理算法 399
15.4.2 標記實現 403
15.4.3 清理 406
15.4.4 監控 408
15.5 本章小結 408
作者簡介
黃靖鈞:全棧開發者,長期以來一直使用Go語言開發網路套用,在Go語言編程方面經驗豐富。熱衷開源,深度參與Docker及其生態建設,積極為Potainer等眾多著名項目貢獻代碼。曾任PaaS與CaaS等類型項目的後端Go開發,現從事基礎設施架構與數據中心開發工作,專注高並發、微服務領域的研究。