內容簡介
Go語言是近年來廣受關注的一門新興程式語言,在設計之初就致力於解決C語言的低效問題,以及C++語言的晦澀、難用等缺陷。Go語言吸收了C、C++強大的開發功能優勢,繼承了C、C++的編程風格,被廣泛套用於構建數字基礎設施類軟體,以及圖形/圖像處理、移動套用、人工智慧、機器學習等領域,廣受國內外大型IT公司的推崇和關注。
《Go語言從入門到項目實戰(視頻版)》除了講解Go語言的基本開發知識,還提供了3個完整的實戰項目及131個源碼示例。另外,本書提供對應的練習與實驗,方便讀者對所學知識進行鞏固和檢驗。
《Go語言從入門到項目實戰(視頻版)》適合高等院校學生閱讀,適合程式設計師自學,也適合培訓機構使用。
圖書目錄
第1部分 Go語言編程基礎
第1章 Go語言入門知識 2
1.1 Go語言簡介 2
1.1.1 Go語言的產生 2
1.1.2 Go語言的特點與優勢 3
1.2 Go語言開發工具的安裝5
1.2.1 Windows下的安裝 6
1.2.2 Linux下的安裝 10
1.2.3 macOS下的安裝 13
1.3 第一個Go語言程式:Hello三酷貓 13
1.4 安裝和使用集成開發環境 16
1.4.1 集成開發環境的安裝 16
1.4.2 項目的創建、編譯和運行 19
1.4.3 代碼的出錯提示及調試 22
1.4.4 代碼風格約定 25
1.5 關鍵字和保留字 26
1.6 為代碼添加注釋 27
1.6.1 單行注釋 27
1.6.2 多行注釋 28
1.7 練習與實驗 29
第2章 基礎語法 30
2.1 聲明 30
2.2 常量與變數 30
2.2.1 常量 31
2.2.2 變數 32
2.2.3 作用域 33
2.3 基本數據類型 34
2.3.1 整型 34
2.3.2 浮點型 36
2.3.3 複數型 38
2.3.4 布爾型 39
2.3.5 字元串型 39
2.4 運算符及優先權 42
2.4.1 算術運算符 42
2.4.2 關係運算符 43
2.4.3 邏輯運算符 44
2.4.4 位運算符 45
2.4.5 賦值運算符 47
2.4.6 指針運算符 49
2.4.7 優先權 49
2.4.8 案例:三酷貓求相加和 50
2.5 練習與實驗 52
第3章 高級數據類型 53
3.1 指針類型 53
3.1.1 指針的概念 54
3.1.2 指針變數的聲明 54
3.1.3 指針變數的賦值 55
3.1.4 訪問指針變數所表示的變數的值 55
3.1.5 空(nil)指針 56
3.1.6 指向指針的指針變數 56
3.1.7 案例:解答三酷貓關於指針的困惑 57
3.2 數組類型 58
3.2.1 數組的概念 59
3.2.2 數組的聲明與初始化 59
3.2.3 訪問數組中的元素 62
3.2.4 多維數組 62
3.2.5 案例:三酷貓計算平均溫度 63
3.3 切片類型 65
3.3.1 切片的概念 65
3.3.2 切片的聲明與初始化 65
3.3.3 空(nil)切片 68
3.3.4 訪問切片中的元素 68
3.3.5 多維切片 69
3.3.6 切片的append ( )函式 69
3.3.7 切片的copy ( )函式72
3.4 集合類型 73
3.4.1 集合的概念 73
3.4.2 集合的聲明與初始化 73
3.4.3 集合中元素的檢索 75
3.4.4 向集合中添加、刪除和修改元素 76
3.5 結構體類型 77
3.5.1 結構體的概念及特點 77
3.5.2 結構體的聲明 77
3.5.3 結構體的使用 78
3.6 練習與實驗 80
第4章 流程控制語法 81
4.1 分支結構 81
4.1.1 if語句 81
4.1.2 if…else…結構 83
4.1.3 多分支結構 83
4.2 switch…case…分支結構84
4.3 循環結構 86
4.3.1 for循環的使用 86
4.3.2 多層循環結構 89
4.4 跳轉控制語句 90
4.4.1 break語句 90
4.4.2 continue語句91
4.4.3 goto語句 92
4.5 for-range結構 93
4.5.1 遍歷數組與切片 93
4.5.2 遍歷集合 94
4.5.3 遍歷字元串 94
4.6 案例:三酷貓背九九乘法表 95
4.7 案例:三酷貓學算法之冒泡排序 95
4.8 練習與實驗 96
第5章 函式 98
5.1 函式的聲明 98
5.1.1 函式的聲明格式 99
5.1.2 函式的參數 99
5.1.3 可變參數 101
5.1.4 函式的返回值 102
5.2 函式的調用 103
5.2.1 函式的調用格式 103
5.2.2 值傳遞與引用傳遞 104
5.2.3 案例:三酷貓識別數據類型 105
5.3 遞歸函式 106
5.4 匿名函式 107
5.4.1 匿名函式的聲明 107
5.4.2 匿名函式的調用 108
5.4.3 將匿名函式賦值給變數 108
5.4.4 使用匿名函式實現回調 108
5.4.5 案例:三酷貓的下載“神器” 109
5.5 閉包 110
5.6 函式的延遲調用 112
5.6.1 延遲調用的使用和特點 112
5.6.2 使用延遲調用的注意事項 113
5.7 Go語言的異常處理115
5.7.1 運行時宕機 116
5.7.2 宕機時恢復 117
5.8 案例:三酷貓的面積計算器 118
5.9 練習與實驗 119
第6章 結構體 120
6.1 類型 120
6.1.1 自定義類型 121
6.1.2 自定義別名 121
6.2 結構體的基本使用 122
6.2.1 結構體的聲明及實例化 122
6.2.2 匿名結構體 125
6.2.3 記憶體中的結構體變數 126
6.2.4 聲明並實例化指針類型的結構體變數 127
6.3 構造函式與方法 128
6.3.1 使用結構體實現構造函式 128
6.3.2 方法與接收者 130
6.4 結構體的嵌套 133
6.4.1 嵌套結構體 133
6.4.2 嵌套匿名結構體 134
6.4.3 使用結構體實現繼承 135
6.5 案例:三酷貓開銀行 136
6.6 練習與實驗 138
第7章 接口 140
7.1 接口概述 140
7.2 接口的定義和使用 141
7.2.1 接口的定義 141
7.2.2 接口的實現 142
7.2.3 調用接口方法 145
7.2.4 值接收者與指針接收者 146
7.2.5 實現多個接口 147
7.2.6 接口的嵌套 149
7.3 空接口的定義和使用 150
7.3.1 空接口的定義 150
7.3.2 空接口的使用 151
7.4 類型斷言 152
7.5 練習與實驗 153
第8章 包 154
8.1 包的聲明與導入 154
8.1.1 包的聲明 154
8.1.2 包的導入 155
8.2 Go應用程式的啟動流程159
8.3 創建包 160
8.4 Go語言中的常用內置包161
8.4.1 文本格式化輸出:fmt包 162
8.4.2 磁碟檔案讀/寫:os包 171
8.4.3 網路服務:net包180
8.4.4 JSON格式工具包:json包 185
8.4.5 時間和日期:time包 188
8.4.6 日誌服務:log包 192
8.4.7 類型轉換:strconv包 195
8.5 案例:三酷貓的資料夾遞歸複製工具 199
8.6 案例:三酷貓的二維碼圖片生成器 201
8.7 練習與實驗 202
第9章 並發、並行與協程 204
9.1 概念 204
9.1.1 進程與執行緒 204
9.1.2 並發與並行 205
9.1.3 協程與執行緒 205
9.2 Go語言協程:Goroutine205
9.2.1 使用Goroutine的優勢 205
9.2.2 創建並啟動單個Goroutine 206
9.2.3 創建並啟動多個Goroutine 209
9.3 Go語言調度模型:GPM210
9.3.1 任務調度發展簡史 210
9.3.2 Go語言中的協程 211
9.3.3 GPM設計思想 211
9.4 runtime包213
9.4.1 獲取當前的作業系統類型和CPU類型 213
9.4.2 獲取和設定CPU核心數量 214
9.4.3 讓出資源 215
9.4.4 終止當前協程 216
9.5 在協程任務之間傳遞數據:Channel 216
9.5.1 通道類型和基本使用 217
9.5.2 無緩衝(同步)通道的使用 218
9.5.3 帶緩衝通道的使用 219
9.5.4 判斷通道是否關閉 220
9.5.5 單向通道的構建 221
9.6 select結構 221
9.7 加鎖和原子操作 223
9.7.1 互斥鎖 224
9.7.2 讀/寫互斥鎖 224
9.7.3 原子操作 226
9.8 定時器 228
9.8.1 Timer 228
9.8.2 Ticker 230
9.9 案例:三酷貓篩選0~1000範圍內的素數 230
9.10 練習與實驗 232
第10章 反射 234
10.1 使用反射訪問變數234
10.1.1 獲取變數的類型 235
10.1.2 獲取變數的值 236
10.1.3 反射值的非空和有效性判定 237
10.2 使用反射訪問指針表示的變數 237
10.3 使用反射訪問結構體 238
10.4 使用反射修改值 240
10.5 使用反射調用函式243
10.6 使用反射創建變數244
10.7 練習與實驗 244
第11章 命令行工具 246
11.1 編譯命令go build 246
11.2 清理命令go clean 247
11.3 運行命令go run 248
11.4 代碼格式化命令gofmt 249
11.5 編譯並安裝命令go install 250
11.6 獲取包命令go get 250
11.7 練習與實驗 251
第12章 資料庫操作 252
12.1 MySQL 252
12.1.1 MySQL準備 253
12.1.2 增刪改查(CRUD)操作 259
12.1.3 事務(Transaction)操作 262
12.2 Redis263
12.2.1 Redis準備 264
12.2.2 Redis數據類型 267
12.2.3 使用Go語言對Redis進行操作 268
12.3 練習與實驗 271
第2部分 Go語言項目實戰
第13章 開發矩陣計算庫 274
13.1 線性代數基礎與項目功能設計 274
13.1.1 線性代數知識的簡單回顧 274
13.1.2 項目功能設計 276
13.2 項目初始化與“鴨子類型”277
13.2.1 初始化項目 277
13.2.2 定義matrix包的數據類型278
13.2.3 面向對象與Go語言中的“鴨子類型” 278
13.3 矩陣計算包matrix的開發 281
13.3.1 定義matrix包中的接口 281
13.3.2 實現matrix包中的方法 282
13.3.3 測試matrix包 288
13.3.4 在其他項目中引用matrix包 292
13.4 項目總結294
第14章 STL檔案解析和MongoDB存儲 295
14.1 STL檔案簡介與項目設計 295
14.1.1 項目功能需求設定 298
14.1.2 項目實現思路 299
14.2 開發utils包 299
14.2.1 錯誤處理檔案handle.go 300
14.2.2 檔案操作檔案fileoper.go 301
14.3 開發用於模型檔案處理的stl包 302
14.3.1 定義數據類型:type.go檔案 303
14.3.2 解析STL檔案數據:stl.go檔案304
14.3.3 安裝和配置MongoDB307
14.3.4 運算元據庫:db.go檔案 310
14.4 開發路由函式的handler包 314
14.4.1 定義回響數據格式類型的type.go檔案 314
14.4.2 用於測試伺服器程式連通性的ping.go檔案 315
14.4.3 處理STL數據請求的stl.go檔案 316
14.5 開發項目入口檔案main.go並測試項目 321
14.5.1 開發main.go檔案 322
14.5.2 使用Postman測試整個項目 324
14.6 項目總結327
第15章 開發檔案加密和解密程式 328
15.1 實現思路及功能設計 328
15.1.1 加密和解密過程的實現思路 329
15.1.2 功能設計 331
15.2 加密和解密程式的設計與實現 331
15.2.1 初始化項目 332
15.2.2 開發項目的utils包 332
15.2.3 對utils包中的關鍵函式進行測試 339
15.3 開發加密、解密和散列值計算的可執行程式 340
15.3.1 實現加密程式 340
15.3.2 實現解密程式 342
15.3.3 實現獨立的散列值計算程式 343
15.4 項目總結346
附錄A 使用fmt.printf ( )函式格式化字元串347
附錄B ASCII編碼 348
附錄C 本書配套代碼檔案 353
作者簡介
劉瑜,高級信息系統項目管理師、軟體工程碩士、CIO、碩士研究生企業導師,擁有20多年的C、ASP、Basic、Foxbase、Delphi、Java、C#、Python、Go等語言編程經驗。曾開發商業項目20餘個,承擔省部級項目5個,發表論文10餘篇。出版圖書《戰神——軟體項目管理深度實戰》《NoSQL資料庫入門與實戰》《Python編程從零基礎到項目實戰(微課視頻版)》《Python編程從數據分析到機器學習實踐》《算法之美——Python語言實現》《Python Django Web從入門到項目實戰(視頻版)》。
蕭文翰,高級測試工程師,擁有9年的實戰經驗。曾參與開發多個項目,涉及通信、線上教育、線上醫療等領域,產品形態涵蓋Android、iOS、Web等。出版圖書《Flutter從0基礎到App上線》《打造流暢的Android App》《深入淺出AndroidJetpack》,參與校對Android App Hookand Plug-In Technology。4項國內專利發明人,CSDN部落格專家,知乎專欄作家,騰訊課堂認證講師。
董樹南,工程力學碩士,西安近代化學研究所副研究員,從事軟體開發工作7年,主要研究方向有Web 3D程式開發、數據分析及可視化等,主要技術棧有Python科學計算、Go語言Web開發,以及基於Vue和Three.js的Web 3D程式設計與實現。