注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機/網(wǎng)絡(luò)軟件與程序設(shè)計Go語言從入門到進階實戰(zhàn)(視頻教學(xué)版)

Go語言從入門到進階實戰(zhàn)(視頻教學(xué)版)

Go語言從入門到進階實戰(zhàn)(視頻教學(xué)版)

定 價:¥99.00

作 者: 徐波 著
出版社: 機械工業(yè)出版社
叢編項:
標(biāo) 簽: 暫缺

ISBN: 9787111598244 出版時間: 2018-06-01 包裝: 平裝
開本: 16開 頁數(shù): 398 字?jǐn)?shù):  

內(nèi)容簡介

  本書采用“理論+實例”的形式編寫,作者通過大量實例,并結(jié)合多年的一線開發(fā)實戰(zhàn)經(jīng)驗,全面介紹了Go語言的語法及應(yīng)用開發(fā)。作者特意為本書精心錄制了同步配套教學(xué)視頻,這將極大地提升讀者的學(xué)習(xí)效率。本書分為13章,主要介紹了Go語言的特性與環(huán)境搭建、基本語法與使用、容器(存儲和組織數(shù)據(jù)的方式)、流程控制、函數(shù)、結(jié)構(gòu)體、接口(interface)、包(package)、并發(fā)、反射、編譯與工具和開發(fā)技巧等內(nèi)容,后的實戰(zhàn)演練部分剖析了作者的開源網(wǎng)絡(luò)庫cellnet的架構(gòu)及設(shè)計思想,并且實現(xiàn)了Socket聊天功能。本書對于Go語言的特色功能——并發(fā),有全面、深入的講解,需要讀者重點學(xué)習(xí)。本書特別適合Go語言初學(xué)者入門和進階閱讀,另外也適合社會培訓(xùn)學(xué)校作為教材使用,還適合大中專院校的相關(guān)專業(yè)作為教學(xué)參考書。

作者簡介

暫缺《Go語言從入門到進階實戰(zhàn)(視頻教學(xué)版)》作者簡介

圖書目錄

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

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號