Go語言從入門到進階實戰(視頻教學版)

Go語言從入門到進階實戰(視頻教學版)

《Go語言從入門到進階實戰(視頻教學版)》一書由機械工業出版社出版發行。

基本介紹

  • 書名:Go語言從入門到進階實戰(視頻教學版) 
  • 作者:徐波 
  • 出版社機械工業出版社
  • 出版時間:2018年
  • 頁數:420 頁
  • 定價:99 元
  • 開本:16 開
  • 裝幀:平裝
  • ISBN:9787111598244
內容簡介,圖書目錄,名人推薦,作者簡介,

內容簡介

本書採用“理論+實例”的編寫形式,通過大量的實例,並結合作者多年的一線開發實戰經驗,全面介紹了Go語言的語法及使用方法。全書秉承方便學習、易於理解、便於查詢的理念編寫而成,無論是想系統學習Go語言基礎知識的初學者,還是想進階提高的有經驗開發人員,都能通過本書迅速掌握Go語言的各種基礎語法和開發技巧。本書作者曾經與慕課網合作錄製過相關視頻課程,有豐富的視頻製作經驗,所以特意為本書重點內容精心錄製了配套教學視頻,這將極大地提升讀者的學習效率,取得比同類圖書更好的學習效果。另外,本書還免費提供了書中涉及的實例原始碼,以方便讀者學習。
本書分為13章,主要介紹了Go語言的特性與環境搭建、基本語法與使用、容器(存儲和組織數據的方式)、流程控制、函式、結構體、接口、包、並發、反射、編譯與工具、Go程式開發技巧;最後的實戰演練部分剖析了作者的開源網路庫cellnet的架構及設計思想,並且實現了Socket聊天功能。本書對於Go語言的並發特色功能有全面、深入的講解,需要讀者重點學習。
本書結構清晰,內容通俗易懂,案例豐富,實用性強,特別適合Go語言初學者和進階讀者閱讀。另外,本書也適合作為相關培訓學校和各大院校的教材或教學參考書。

圖書目錄

第1章 初識Go語言.... 1
1.1 Go語言特性... 1
1.2 使用Go語言的項目... 9
1.3 怎樣安裝Go語言開發包... 10
1.3.1 Windows版安裝... 11
1.3.2 Linux版安裝... 13
1.4 搭建開發環境... 14
1.4.1 集成開發環境——Jetbrains GoLand. 14
1.4.2 方便定義功能的編輯器——Visual Studio Code. 15
第2章 Go語言基本語法與使用.... 19
2.1 變數... 19
2.1.1 聲明變數... 19
2.1.2 初始化變數... 20
2.1.3 多個變數同時賦值... 23
2.1.4 匿名變數——沒有名字的變數... 24
2.2 數據類型... 24
2.2.1 整型... 25
2.2.2 浮點型... 25
2.2.3 示例:輸出正弦函式(Sin)圖像... 26
2.2.4 布爾型... 28
2.2.5 字元串... 29
2.2.6 字元... 31
2.2.7 切片——能動態分配的空間... 32
2.3 轉換不同的數據類型... 33
2.4 指針... 34
2.4.1 認識指針地址和指針類型... 35
2.4.2 從指針獲取指針指向的值... 36
2.4.3 使用指針修改值... 37
2.4.4 示例:使用指針變數獲取命令行的輸入信息... 39
2.4.5 創建指針的另一種方法——new()函式... 40
2.5 變數生命期——變數能夠使用的代碼範圍... 40
2.5.1 什麼是棧... 41
2.5.2 什麼是堆... 42
2.5.3 變數逃逸(Escape Analysis)——自動決定變數分配方式,提高運行效率... 43
2.6 字元串套用... 46
2.6.1 計算字元串長度... 46
2.6.2 遍歷字元串——獲取每一個字元串元素... 47
2.6.3 獲取字元串的某一段字元... 48
2.6.4 修改字元串... 49
2.6.5 連線字元串... 49
2.6.6 格式化... 50
2.6.7 示例:Base64編碼——電子郵件的基礎編碼格式... 51
2.6.8 示例:從INI配置檔案中查詢需要的值... 52
2.7 常量——恆定不變的值... 57
2.7.1 枚舉——一組常量值... 58
2.7.2 將枚舉值轉換為字元串... 59
2.8 類型別名(TypeAlias)... 60
2.8.1 區分類型別名與類型定義... 61
2.8.2 非本地類型不能定義方法... 62
2.8.3 在結構體成員嵌入時使用別名... 63
第3章 容器:存儲和組織數據的方式.... 65
3.1 數組——固定大小的連續空間... 65
3.1.1 聲明數組... 66
3.1.2 初始化數組... 66
3.1.3 遍歷數組——訪問每一個數組元素... 67
3.2 切片(slice)——動態分配大小的連續空間... 67
3.2.1 從數組或切片生成新的切片... 68
3.2.2 聲明切片... 70
3.2.3 使用make()函式構造切片... 71
3.2.4 使用append()函式為切片添加元素... 71
3.2.5 複製切片元素到另一個切片... 73
3.2.6 從切片中刪除元素... 74
3.3 映射(map)——建立事物關聯的容器... 76
3.3.1 添加關聯到map並訪問關聯和數據... 76
3.3.2 遍歷map的“鍵值對”—— 訪問每一個map中的關聯關係... 77
3.3.3 使用delete()函式從map中刪除鍵值對... 79
3.3.4 清空map中的所有元素... 79
3.3.5 能夠在並發環境中使用的map—— sync.Map. 79
3.4 列表(list)——可以快速增刪的非連續空間的容器... 81
3.4.1 初始化列表... 83
3.4.2 在列表中插入元素... 83
3.4.3 從列表中刪除元素... 84
3.4.4 遍歷列表——訪問列表的每一個元素... 85
第4章 流程控制.... 87
4.1 條件判斷(if)... 87
4.2 構建循環(for)... 88
4.2.1 for中的初始語句——開始循環時執行的語句... 89
4.2.2 for中的條件表達式——控制是否循環的開關... 89
4.2.3 for中的結束語句——每次循環結束時執行的語句... 90
4.3 示例:九九乘法表... 90
4.4 鍵值循環(forrange)——直接獲得對象的索引和數據... 91
4.4.1 遍歷數組、切片——獲得索引和元素... 92
4.4.2 遍歷字元串——獲得字元... 92
4.4.3 遍歷map——獲得map的鍵和值... 92
4.4.4 遍歷通道(channel)——接收通道數據... 93
4.4.5 在遍歷中選擇希望獲得的變數... 93
4.5 分支選擇(switch)——擁有多個條件分支的判斷... 94
4.5.1 基本寫法... 95
4.5.2 跨越case的fallthrough——兼容C語言的case設計... 96
4.6 跳轉到指定代碼標籤(goto)... 96
4.6.1 使用goto退出多層循環... 96
4.6.2 使用goto集中處理錯誤... 97
4.6.3 統一錯誤處理... 98
4.7 跳出指定循環(break)——可以跳出多層循環... 99
4.8 繼續下一次循環(continue)... 100
第5章 函式(function).... 101
5.1 聲明函式... 101
5.1.1 普通函式的聲明形式... 101
5.1.2 參數類型的簡寫... 102
5.1.3 函式的返回值... 102
5.1.4 調用函式... 104
5.1.5 示例:將“秒”解析為時間單位... 104
5.1.6 示例:函式中的參數傳遞效果測試... 105
5.2 函式變數——把函式作為值保存到變數中... 108
5.3 示例:字元串的鏈式處理——操作與數據分離的設計技巧... 109
5.4 匿名函式——沒有函式名字的函式... 112
5.4.1 定義一個匿名函式... 112
5.4.2 匿名函式用作回調函式... 113
5.4.3 使用匿名函式實現操作封裝... 113
5.5 函式類型實現接口——把函式作為接口來調用... 115
5.5.1 結構體實現接口... 115
5.5.2 函式體實現接口... 116
5.5.3 HTTP包中的例子... 117
5.6 閉包(Closure)——引用了外部變數的匿名函式... 118
5.6.1 在閉包內部修改引用的變數... 119
5.6.2 示例:閉包的記憶效應... 119
5.6.3 示例:閉包實現生成器... 121
5.7 可變參數——參數數量不固定的函式形式... 122
5.7.1 fmt包中的例子... 122
5.7.2 遍歷可變參數列表——獲取每一個參數的值... 123
5.7.3 獲得可變參數類型——獲得每一個參數的類型... 124
5.7.4 在多個可變參數函式中傳遞參數... 125
5.8 延遲執行語句(defer)... 127
5.8.1 多個延遲執行語句的處理順序... 127
5.8.2 使用延遲執行語句在函式退出時釋放資源... 127
5.9 處理運行時發生的錯誤... 131
5.9.1 net包中的例子... 131
5.9.2 錯誤接口的定義格式... 132
5.9.3 自定義一個錯誤... 132
5.9.4 示例:在解析中使用自定義錯誤... 133
5.10 宕機(panic)——程式終止運行... 135
5.10.1 手動觸發宕機... 135
5.10.2 在運行依賴的必備資源缺失時主動觸發宕機... 136
5.10.3 在宕機時觸發延遲執行語句... 136
5.11 宕機恢復(recover)——防止程式崩潰... 137
5.11.1 讓程式在崩潰時繼續執行... 137
5.11.2 panic和recover的關係... 139
第6章 結構體(struct).... 141
6.1 定義結構體... 141
6.2 實例化結構體——為結構體分配記憶體並初始化... 142
6.2.1 基本的實例化形式... 142
6.2.2 創建指針類型的結構體... 143
6.2.3 取結構體的地址實例化... 143
6.3 初始化結構體的成員變數... 144
6.3.1 使用“鍵值對”初始化結構體... 145
6.3.2 使用多個值的列表初始化結構體... 146
6.3.3 初始化匿名結構體... 147
6.4 構造函式——結構體和類型的一系列初始化操作的函式封裝... 148
6.4.1 多種方式創建和初始化結構體——模擬構造函式重載... 149
6.4.2 帶有父子關係的結構體的構造和初始化——模擬父級構造調用... 149
6.5 方法... 150
6.5.1 為結構體添加方法... 151
6.5.2 接收器——方法作用的目標... 152
6.5.3 示例:二維矢量模擬玩家移動... 155
6.5.4 為類型添加方法... 160
6.5.5 示例:使用事件系統實現事件的回響和處理... 165
6.6 類型內嵌和結構體內嵌... 170
6.6.1 聲明結構體內嵌... 170
6.6.2 結構內嵌特性... 172
6.6.3 使用組合思想描述對象特性... 173
6.6.4 初始化結構體內嵌... 174
6.6.5 初始化內嵌匿名結構體... 175
6.6.6 成員名字衝突... 177
6.7 示例:使用匿名結構體分離JSON數據... 178
第7章 接口(interface).... 181
7.1 聲明接口... 181
7.1.1 接口聲明的格式... 181
7.1.2 開發中常見的接口及寫法... 182
7.2 實現接口的條件... 182
7.2.1 接口被實現的條件一:接口的方法與實現接口的類型方法格式一致... 182
7.2.2 條件二:接口中所有方法均被實現... 185
7.3 理解類型與接口的關係... 186
7.3.1 一個類型可以實現多個接口... 186
7.3.2 多個類型可以實現相同的接口... 187
7.4 示例:便於擴展輸出方式的日誌系統... 189
7.5 示例:使用接口進行數據的排序... 195
7.5.1 使用sort.Interface接口進行排序... 195
7.5.2 常見類型的便捷排序... 197
7.5.3 對結構體數據進行排序... 199
7.6 接口的嵌套組合——將多個接口放在一個接口內... 202
7.7 在接口和類型間轉換... 205
7.7.1 類型斷言的格式... 205
7.7.2 將接口轉換為其他接口... 205
7.7.3 將接口轉換為其他類型... 208
7.8 空接口類型(interface{})——能保存所有值的類型... 208
7.8.1 將值保存到空接口... 209
7.8.2 從空接口獲取值... 209
7.8.3 空接口的值比較... 210
7.9 示例:使用空接口實現可以保存任意值的字典... 211
7.10 類型分支——批量判斷空接口中變數的類型... 214
7.10.1 類型斷言的書寫格式... 214
7.10.2 使用類型分支判斷基本類型... 215
7.10.3 使用類型分支判斷接口類型... 215
7.11 示例:實現有限狀態機(FSM)... 217
第8章 包(package).... 227
8.1 工作目錄(GOPATH)... 227
8.1.1 使用命令行查看GOPATH信息... 227
8.1.2 使用GOPATH的工程結構... 228
8.1.3 設定和使用GOPATH.. 229
8.1.4 在多項目工程中使用GOPATH.. 230
8.2 創建包package——編寫自己的代碼擴展... 231
8.3 導出標識符——讓外部訪問包的類型和值... 231
8.3.1 導出包內標識符... 231
8.3.2 導出結構體及接口成員... 232
8.4 導入包(import)——在代碼中使用其他的代碼... 232
8.4.1 默認導入的寫法... 233
8.4.2 導入包後自定義引用的包名... 234
8.4.3 匿名導入包——只導入包但不使用包內類型和數值... 235
8.4.4 包在程式啟動前的初始化入口:init 235
8.4.5 理解包導入後的init()函式初始化順序... 235
8.5 示例:工廠模式自動註冊——管理多個包的結構體... 237
第9章 並發.... 241
9.1 輕量級執行緒(goroutine)——根據需要隨時創建的“執行緒”... 241
9.1.1 使用普通函式創建goroutine. 241
9.1.2 使用匿名函式創建goroutine. 244
9.1.3 調整並發的運行性能(GOMAXPROCS)... 245
9.1.4 理解並發和並行... 245
9.1.5 Go語言的協作程式(goroutine)和普通的協作程式(coroutine)... 246
9.2 通道(channel)——在多個goroutine間通信的管道... 246
9.2.1 通道的特性... 247
9.2.2 聲明通道類型... 247
9.2.3 創建通道... 248
9.2.4 使用通道傳送數據... 248
9.2.5 使用通道接收數據... 249
9.2.6 示例:並發列印... 252
9.2.7 單向通道——通道中的單行道... 254
9.2.8 帶緩衝的通道... 255
9.2.9 通道的多路復用——同時處理接收和傳送多個通道的數據... 257
9.2.10 示例:模擬遠程過程調用(RPC)... 258
9.2.11 示例:使用通道回響計時器的事件... 261
9.2.12 關閉通道後繼續使用通道... 264
9.3 示例:Telnet回音伺服器——TCP伺服器的基本結構... 266
9.4 同步——保證並發環境下數據訪問的正確性... 273
9.4.1 競態檢測——檢測代碼在並發環境下可能出現的問題... 273
9.4.2 互斥鎖(sync.Mutex)——保證同時只有一個goroutine可以訪問共享資源... 275
9.4.3 讀寫互斥鎖(sync.RWMutex)——在讀比寫多的環境下比互斥鎖更高效... 277
9.4.4 等待組(sync.WaitGroup)——保證在並發環境中完成指定數量的任務... 277
第10章 反射.... 280
10.1 反射的類型對象(reflect.Type)... 280
10.1.1 理解反射的類型(Type)與種類(Kind)... 281
10.1.2 指針與指針指向的元素... 283
10.1.3 使用反射獲取結構體的成員類型... 284
10.1.4 結構體標籤(Struct Tag)——對結構體欄位的額外信息標籤... 287
10.2 反射的值對象(reflect.Value)... 288
10.2.1 使用反射值對象包裝任意值... 288
10.2.2 從反射值對象獲取被包裝的值... 289
10.2.3 使用反射訪問結構體的成員欄位的值... 290
10.2.4 反射對象的空和有效性判斷... 292
10.2.5 使用反射值對象修改變數的值... 293
10.2.6 通過類型創建類型的實例... 297
10.2.7 使用反射調用函式... 298
10.3 示例:將結構體的數據保存為JSON格式的文本數據... 299
第11章 編譯與工具.... 306
11.1 編譯(gobuild)... 306
11.1.1 go build 無參數編譯... 306
11.1.2 go build+檔案列表... 307
11.1.3 go build +包... 308
11.1. 4 go build編譯時的附加參數... 310
11.2 編譯後運行(gorun)... 310
11.3 編譯並安裝(go install)... 311
11.4 一鍵獲取代碼、編譯並安裝(goget)... 312
11.4.1 遠程包的路徑格式... 312
11.4.2 go get + 遠程包... 312
11.4.3 go get使用時的附加參數... 313
11.5 測試(gotest)... 313
11.5.1 單元測試——測試和驗證代碼的框架... 313
11.5.2 基準測試——獲得代碼記憶體占用和運行效率的性能數據... 316
11.6 性能分析(gopprof)——發現代碼性能問題的調用位置... 319
11.6.1 安裝第三方圖形化顯式分析數據工具(Graphviz)... 319
11.6.2 安裝第三方性能分析來分析代碼包... 319
11.6.3 性能分析代碼... 319
第12章 “避坑”與技巧.... 323
12.1 合理地使用並發特性... 323
12.1.1 了解goroutine的生命期時再創建goroutine. 323
12.1.2 避免在不必要的地方使用通道... 326
12.2 反射:性能和靈活性的雙刃劍... 330
12.3 接口的nil判斷... 335
12.4 map的多鍵索引——多個數值條件可以同時查詢... 336
12.4.1 基於哈希值的多鍵索引及查詢... 337
12.4.2 利用map特性的多鍵索引及查詢... 341
12.4.3 總結... 342
12.5 優雅地處理TCP粘包... 342
第13章 實戰演練——剖析cellnet網路庫設計並實現Socket聊天功能.... 354
13.1 了解cellet網路庫特性、流程及架構... 354
13.1.1 cellnet網路庫的特性... 354
13.1.2 cellnet網路庫的流程及架構... 356
13.2 管理TCPSocket連線... 356
13.2.1 理解Socket的事件類型... 357
13.2.2 管理事件回調... 359
13.2.3 連線器(Connector)... 361
13.2.4 會話管理(SessionManager)... 363
13.2.5 接受器(Acceptor)... 366
13.3 組織接收和傳送數據流程的Socket會話(Session)... 367
13.3.1 在會話開始時啟動goroutine和派發事件... 368
13.3.2 會話中的接收數據循環... 369
13.3.3 會話中的傳送數據循環... 370
13.4 排隊處理事件的事件佇列(EventQueue)... 372
13.4.1 實現事件佇列... 372
13.4.2 使用不同的事件佇列模式處理數據... 374
13.5 訊息編碼(codec)——讓cellnet支持訊息的多種編碼格式... 377
13.6 訊息元信息(MessageMeta)——訊息ID、訊息名稱和訊息類型的關聯關係... 379
13.6.1 理解訊息元信息... 380
13.6.2 註冊訊息元信息... 380
13.6.3 示例:使用訊息元信息... 381
13.6.4 實現訊息的編碼(EncodeMessage())和解碼(DecodeMessage())函式... 382
13.7 接收和傳送封包(packet)... 383
13.7.1 接收可變長度封包... 384
13.7.2 了解封包數據讀取器(PacketReader)... 385
13.7.3 了解封包數據寫入器(PacketWriter)... 387
13.7.4 讀取自定義封包及數據... 387
13.7.5 寫入自定義封包及數據... 389
13.7.6 回響訊息處理事件... 390
13.8 使用cellnet網路庫實現聊天功能... 392
13.8.1 定義聊天協定... 393
13.8.2 實現客戶端功能... 394
13.8.3 實現伺服器功能... 396
13.8.4 運行聊天伺服器和客戶端.. 398

名人推薦

本書吸取了業內號稱“Go語言聖經”的《Go程式設計語言》一書的精華,內容和實例非常接地氣,開發人員可以快速入門Go語言並掌握“避坑”技巧,編寫出具有優良設計的代碼。
—— FBG對沖基金高級投資顧問/Golang開源社區著名KOL 傅理(xtaci)
本書不僅全面介紹了Go語言的語法和開發技巧,而且還剖析了作者開發的開源網路庫cellnet的設計和架構思想,給讀者提供了一個從入門到進階的漸進式學習路徑,是一本值得反覆閱讀的佳作。
——成都手領科技聯合創始人&CTO 張銳
本書是作者多年Go語言項目開發的經驗總結。對於學習Go語言的讀者而言,本書是一本很好的入門教程。作者用簡單明了的語言由淺入深地介紹了每個知識點,並結合大量實例分析問題,可以幫助讀者更好地掌握Go語言的重要知識點和開發技巧。
——遊戲蝸牛技術研究院 張俊勝
從C++到Go語言,本書作者擁有十多年的開發經驗積累,對主流程式語言的思想有深刻理解。本書對Go語言做了深入淺出的剖析,系統地講述了Go語言的編程方法,是一本不可多得的佳作。
——上海軟星 陳杰
本書是一本Go語言的饕餮盛宴,內容詳盡,講解深入淺出。不論你是Go語言的初學者,還是正在使用Go語言開發項目的程式設計師,閱讀完本書,都會有很大的獲益。
——競技世界 王海波

作者簡介

徐波 資深全棧遊戲開發者,慕課網特邀講師,開源愛好者,Gopher之一。遊戲行業從業十餘年。曾就職於著名的網路遊戲公司Possibility Space,與暴雪星際爭霸程式Gage Galinger和美術界知名原畫師朱峰(變形金剛電影版紅蜘蛛設計者)一起開發了大型3D暗黑系魔幻網遊Warrior Epic。業界最早實現了微端Download On Demand技術。2009年開設戰魂小築部落格。2012年開始使用Go語言,並在GitHub上發布了cellnet網路庫及tabtoy導表工具,深受業界讚譽。作為慕課網特邀講師,製作了多個技術視頻,講授Go語言、Cocos和Unity等課程,廣受學員好評。

相關詞條

熱門詞條

聯絡我們