注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)Go語(yǔ)言編程指南

Go語(yǔ)言編程指南

Go語(yǔ)言編程指南

定 價(jià):¥119.80

作 者: [美]馬克·貝茨(Mark Bates)
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書可以去


ISBN: 9787115636218 出版時(shí)間: 2024-06-01 包裝: 平裝-膠訂
開本: 16開 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  本書涵蓋了 Go 語(yǔ)言的基礎(chǔ)語(yǔ)法、核心概念、慣用法和高級(jí)特性,并提供了豐富的代碼示例,旨在幫助開發(fā)人員快速上手 Go 語(yǔ)言編程。本書首先介紹了 Go 語(yǔ)言如何管理包、模塊和依賴,幫助讀者建立良好的項(xiàng)目結(jié)構(gòu)。接著介紹了字符串、變量和常量等基礎(chǔ)知識(shí)。隨后詳細(xì)介紹了 Go 語(yǔ)言中的復(fù)合類型,如數(shù)組、切片、map、控制結(jié)構(gòu)、函數(shù)、結(jié)構(gòu)體、方法和指針等的正確使用方法。之后傳授了編寫高質(zhì)量測(cè)試代碼的方法,并介紹了 Go 語(yǔ)言的接口和新的泛型功能及其使用方法。并發(fā)編程是 Go 語(yǔ)言的重要特性,本書最后專門介紹了如何利用并發(fā)提升代碼性能,并詳細(xì)講解了通道、Context 及其他高級(jí)同步原語(yǔ)的使用方法。本書根據(jù)作者的 Gopher Guides 培訓(xùn)課程編寫,適合 Go 語(yǔ)言初學(xué)者和具備其他編程語(yǔ)言知識(shí)的開發(fā)人員學(xué)習(xí)和參考,也可作為高等院校相關(guān)專業(yè)的教學(xué)參考書。

作者簡(jiǎn)介

  馬克·貝茨 Gopher Guides 的聯(lián)合創(chuàng)始人和講師。Gopher Guides 是 Go 語(yǔ)言培訓(xùn)、咨詢和會(huì)議研討方面的行業(yè)先驅(qū)。自 2000年以來(lái),馬克·貝茨一直與世界上一些規(guī)模很大且具有創(chuàng)新性的公司合作,包括蘋果、Uber 和 Visa。馬克·貝茨于 2013 年發(fā)現(xiàn)了 Go 語(yǔ)言并在世界各地組織、主持 Go 語(yǔ)言會(huì)議,或在 Go 語(yǔ)言會(huì)議上發(fā)言,他經(jīng)常參加 Go Time 播客節(jié)目??迫?middot;拉諾 Gopher Guides 的聯(lián)合創(chuàng)始人和講師。在過去的 20 年里,他一直專注于初創(chuàng)企業(yè)的全棧技術(shù)??迫?middot;拉諾與 Go 語(yǔ)言有很深的淵源,曾發(fā)起 Go 聚會(huì)——Denver Gophers。他利用自己在 InfluxDB(一個(gè)用Go 語(yǔ)言編寫的高可擴(kuò)展的數(shù)據(jù)庫(kù))等項(xiàng)目上的實(shí)際經(jīng)驗(yàn),開設(shè)了大量實(shí)用的 Go 語(yǔ)言培訓(xùn)課程,并發(fā)表了許多相關(guān)文章。

圖書目錄

目錄
 
第 1章 模塊、包和依賴 1
1.1  模塊 1
1.1.1  工具鏈 2
1.1.2  初始化一個(gè)模塊 3
1.1.3  版本控制系統(tǒng)與模塊 3
1.2  包 4
1.2.1  什么是包 4
1.2.2  包命名 4
1.3  文件夾、文件與代碼組織 6
1.3.1  同一文件夾下的多個(gè)包 7
1.3.2  文件命名 8
1.3.3  包組織 8
1.4  導(dǎo)入包和模塊 11
1.4.1  導(dǎo)入路徑 12
1.4.2  使用import關(guān)鍵字 13
1.4.3  解決導(dǎo)入包的名字沖突問題 13
1.5  依賴 15
1.5.1  使用依賴 15
1.5.2  使用go get添加依賴 16
1.5.3  go.sum文件 18
1.5.4  更新依賴 19
1.5.5  語(yǔ)義版本 20
1.5.6  多版本 20
1.5.7  循環(huán)導(dǎo)入 21
1.6  本章小結(jié) 23
第 2章 Go語(yǔ)言基礎(chǔ) 24
2.1  Go語(yǔ)言概述 24
2.1.1  靜態(tài)類型 24
2.1.2  垃圾回收 25
2.1.3  編譯 25
2.1.4  關(guān)鍵字、運(yùn)算符和分隔符 26
2.2  數(shù)值 27
2.2.1  選擇正確的數(shù)值類型 28
2.2.2  溢出和繞回 28
2.2.3  飽和 30
2.3  字符串 30
2.3.1  解釋型字符串字面值 30
2.3.2  原始字符串字面值 31
2.4  UTF-8 32
2.4.1  rune 33
2.4.2  遍歷UTF-8字符串 33
2.5  變量 35
2.5.1  變量聲明 35
2.5.2  變量賦值 35
2.5.3  零值 36
2.5.4  nil 37
2.5.5  零值速查表 37
2.5.6  變量聲明與初始化 38
2.5.7  多變量賦值 39
2.5.8  未使用的變量 40
2.6  常量 41
2.6.1  帶類型的常量 43
2.6.2  無(wú)類型常量(推斷類型) 43
2.6.3  類型推斷 44
2.7  標(biāo)識(shí)符命名 45
2.7.1  命名風(fēng)格 46
2.7.2  與包名沖突 47
2.7.3  通過首字母大寫實(shí)現(xiàn)標(biāo)識(shí)符導(dǎo)出 50
2.8  打印與格式化 50
2.8.1  格式化函數(shù) 50
2.8.2  換行 52
2.8.3  使用Println打印參數(shù) 53
2.8.4  使用格式化函數(shù) 53
2.8.5  轉(zhuǎn)義序列 53
2.8.6  格式化字符串 55
2.8.7  格式化整型 55
2.8.8  格式化浮點(diǎn)型 57
2.8.9  打印值的類型 58
2.8.10  打印值 59
2.8.11  打印值的更多細(xì)節(jié) 59
2.8.12  以Go語(yǔ)法格式打印值 60
2.8.13  錯(cuò)誤使用格式化控制符 61
2.8.14  顯式的實(shí)參索引 62
2.8.15  字符串與數(shù)值的相互轉(zhuǎn)換 63
2.9  本章小結(jié) 65
第3章 數(shù)組、切片和迭代 66
3.1  列表類型:數(shù)組與切片 66
3.1.1  數(shù)組與切片的差異 66
3.1.2  識(shí)別差異 67
3.1.3  初始化數(shù)組與切片 68
3.1.4  數(shù)組與切片的零值 69
3.1.5  數(shù)組與切片的索引 70
3.1.6  數(shù)組與切片類型 71
3.1.7  數(shù)組與切片類型的定義 71
3.1.8  設(shè)置數(shù)組與切片變量的值 72
3.1.9  向切片追加元素 73
3.1.10  向切片追加一個(gè)切片 74
3.2  切片的工作原理 77
3.2.1  長(zhǎng)度與容量 78
3.2.2  切片的擴(kuò)容 79
3.2.3  使用make函數(shù)創(chuàng)建切片 81
3.2.4  使用帶長(zhǎng)度和容量參數(shù)的make函數(shù) 82
3.2.5  make與append函數(shù) 83
3.2.6  切片擴(kuò)容時(shí)發(fā)生了什么 83
3.2.7  子切片 85
3.2.8  修改子切片 85
3.2.9  復(fù)制切片 86
3.2.10  將數(shù)組轉(zhuǎn)換為切片 88
3.3  迭代 89
3.3.1  for循環(huán) 89
3.3.2  迭代數(shù)組與切片 90
3.3.3  range關(guān)鍵字 90
3.3.4  控制循環(huán) 91
3.3.5  do-while循環(huán) 93
3.4  本章小結(jié) 94
第4章 map和控制結(jié)構(gòu) 95
4.1  map 95
4.1.1  長(zhǎng)度和容量 96
4.1.2  初始化map 97
4.1.3  未初始化的map 97
4.1.4  map的鍵 98
4.1.5  以結(jié)構(gòu)體作為鍵 98
4.1.6  迭代map 99
4.1.7  刪除map中的鍵 101
4.1.8  不存在的map鍵 102
4.1.9  檢查map中的鍵是否存在 103
4.1.10  利用零值 103
4.1.11  僅測(cè)試鍵的存在性 104
4.1.12  map和復(fù)雜值 105
4.1.13  插入時(shí)復(fù)制 106
4.1.14  列出map中的鍵 108
4.2  if語(yǔ)句 111
4.2.1  else語(yǔ)句 111
4.2.2  else if 語(yǔ)句 112
4.2.3  賦值作用域 113
4.2.4  邏輯和數(shù)學(xué)運(yùn)算符 115
4.3  switch語(yǔ)句 116
4.3.1  default 118
4.3.2  fallthrough 119
4.4  本章小結(jié) 120
第5章 函數(shù) 121
5.1  函數(shù)定義 121
5.1.1  參數(shù) 121
5.1.2  相同類型的參數(shù) 122
5.1.3  返回值 123
5.1.4  多返回值 123
5.1.5  具名返回值 125
5.1.6  作為一等公民的函數(shù) 126
5.1.7  閉包 127
5.1.8  匿名函數(shù) 128
5.1.9  接受其他函數(shù)的返回值作為參數(shù) 129
5.2  可變參數(shù) 129
5.2.1  可變參數(shù)的位置 130
5.2.2  擴(kuò)展切片 131
5.2.3  何時(shí)使用可變參數(shù) 132
5.3  延遲函數(shù)調(diào)用 133
5.3.1  多個(gè)返回路徑下的延遲執(zhí)行 133
5.3.2  延遲函數(shù)調(diào)用的執(zhí)行順序 134
5.3.3  延遲函數(shù)調(diào)用與panic 135
5.3.4  defer與Exit/Fatal 135
5.3.5  defer與匿名函數(shù) 136
5.3.6  defer與作用域 137
5.4  init函數(shù) 139
5.4.1  多個(gè)init函數(shù) 139
5.4.2  init函數(shù)的執(zhí)行順序 140
5.4.3  利用init函數(shù)的導(dǎo)入副作用 140
5.5  本章小結(jié) 142
第6章 結(jié)構(gòu)體、方法和指針 143
6.1  結(jié)構(gòu)體 143
6.1.1  在Go語(yǔ)言中聲明新類型 143
6.1.2  定義結(jié)構(gòu)體 144
6.1.3  初始化結(jié)構(gòu)體 145
6.1.4  不帶字段名的初始化 146
6.1.5  訪問結(jié)構(gòu)體字段 147
6.1.6  結(jié)構(gòu)體標(biāo)簽 148
6.1.7  編碼用的結(jié)構(gòu)體標(biāo)簽 148
6.1.8  使用結(jié)構(gòu)體標(biāo)簽 150
6.2  方法 150
6.2.1  方法與函數(shù)的不同 151
6.2.2  方法表達(dá)式 151
6.2.3  第三方類型的方法 152
6.2.4  函數(shù)作為類型 154
6.2.5  函數(shù)的方法 154
6.2.6  沒有繼承 155
6.3  指針 156
6.3.1  值傳遞 156
6.3.2  接收指針 158
6.3.3  獲取指針 158
6.3.4  傳遞指針 159
6.3.5  使用指針 160
6.3.6  值接收者與指針接收者 161
6.3.7  new函數(shù) 162
6.3.8  性能 163
6.3.9  nil接收者 164
6.3.10  nil接收者檢查 165
6.4  本章小結(jié) 166
第7章 測(cè)試 167
7.1  測(cè)試基礎(chǔ) 167
7.1.1  命名 167
7.1.2  testing.T類型 168
7.1.3  標(biāo)記測(cè)試失敗 169
7.1.4  使用t.Error 170
7.1.5  使用T.Fatal(推薦) 172
7.1.6  精心編寫測(cè)試失敗的信息 173
7.2  代碼覆蓋率 174
7.2.1  代碼覆蓋率基礎(chǔ) 174
7.2.2  生成覆蓋率報(bào)告 174
7.2.3  go tool cover命令 175
7.2.4  生成HTML覆蓋率報(bào)告 176
7.2.5  編輯器支持 177
7.3  表驅(qū)動(dòng)測(cè)試 178
7.3.1  表驅(qū)動(dòng)測(cè)試剖析 178
7.3.2  編寫表驅(qū)動(dòng)測(cè)試 179
7.3.3  子測(cè)試 181
7.3.4  子測(cè)試剖析 181
7.3.5  編寫子測(cè)試 182
7.4  運(yùn)行測(cè)試 183
7.4.1  運(yùn)行指定包的測(cè)試 183
7.4.2  運(yùn)行當(dāng)前包及子包中的測(cè)試 183
7.4.3  輸出測(cè)試詳細(xì)信息 183
7.4.4  在測(cè)試中輸出日志 184
7.4.5  短測(cè)試 185
7.4.6  并行運(yùn)行包測(cè)試 186
7.4.7  并行運(yùn)行測(cè)試 186
7.4.8  運(yùn)行特定的測(cè)試 187
7.4.9  設(shè)置測(cè)試超時(shí)時(shí)間 188
7.4.10  快速失敗 189
7.4.11  禁用測(cè)試緩存 190
7.5  測(cè)試輔助函數(shù) 190
7.5.1  定義測(cè)試輔助函數(shù) 190
7.5.2  將函數(shù)標(biāo)記為測(cè)試輔助函數(shù) 194
7.5.3  清理測(cè)試輔助函數(shù)的資源 195
7.6  本章小結(jié) 196
第8章 接口 197
8.1  具體類型VS.接口 197
8.2  顯式接口實(shí)現(xiàn) 199
8.3  隱式接口實(shí)現(xiàn) 200
8.4  使用接口之前 201
8.5  使用接口 202
8.6  實(shí)現(xiàn)io.Writer接口 204
8.7  多個(gè)接口 206
8.8  斷言接口實(shí)現(xiàn) 206
8.9  空接口 207
8.9.1  any 關(guān)鍵字 207
8.9.2  空接口的問題 207
8.9.3  使用空接口 208
8.10  定義接口 208
8.10.1  定義Model接口 209
8.10.2  實(shí)現(xiàn)接口 211
8.11  嵌入接口 212
8.12  類型斷言 214
8.12.1  對(duì)斷言進(jìn)行斷言 214
8.12.2  斷言具體類型 215
8.13  通過switch語(yǔ)句進(jìn)行斷言 215
8.13.1  捕獲switch語(yǔ)句中的類型斷言結(jié)果 216
8.13.2  注意case子句的順序 216
8.14  使用斷言 217
8.14.1  定義回調(diào)接口 218
8.14.2  代碼拆解分析 219
8.15  本章小結(jié) 219
第9章 錯(cuò)誤 220
9.1  錯(cuò)誤作為值 220
9.1.1  error 接口 222
9.1.2  處理錯(cuò)誤 223
9.1.3  使用錯(cuò)誤 224
9.2  panic 225
9.2.1  引發(fā)panic 225
9.2.2  從panic狀態(tài)恢復(fù) 226
9.2.3  捕獲并返回panic值 229
9.3  不要主動(dòng)拋出panic 232
9.3.1  檢查nil 233
9.3.2  創(chuàng)建map 235
9.3.3  指針 237
9.3.4  接口 238
9.3.5  函數(shù) 241
9.3.6  類型斷言 242
9.3.7  數(shù)組/切片的索引 244
9.4  自定義錯(cuò)誤 246
9.4.1  標(biāo)準(zhǔn)錯(cuò)誤 247
9.4.2  實(shí)現(xiàn)自定義錯(cuò)誤 248
9.5  包裝錯(cuò)誤和解包裝錯(cuò)誤 250
9.5.1  包裝錯(cuò)誤 252
9.5.2  解包裝錯(cuò)誤 253
9.5.3  解包裝自定義錯(cuò)誤 254
9.5.4  包裝或者不包裝 257
9.6  errors.As和errors.Is函數(shù) 257
9.6.1  As函數(shù) 258
9.6.2  Is函數(shù) 260
9.7  棧跟蹤信息 262
9.8  本章小結(jié) 263
第 10章 泛型 264
10.1  什么是泛型 264
10.1.1  接口存在的問題 264
10.1.2  類型約束 268
10.1.3  多重泛型類型 269
10.1.4  實(shí)例化泛型函數(shù) 271
10.1.5  定義約束 272
10.1.6  多類型約束 273
10.1.7  底層類型約束 275
10.1.8  constraints包 277
10.1.9  類型斷言 279
10.1.10  混合使用方法約束和類型約束 281
10.1.11  泛型類型 281
10.2  本章小結(jié) 284
第 11章 通道 285
11.1  并發(fā)和并行 285
11.1.1  并發(fā)不等于并行 286
11.1.2  理解并發(fā) 286
11.2  Go語(yǔ)言中的并發(fā)模型 287
11.2.1  goroutine 288
11.2.2  goroutine的內(nèi)存 288
11.2.3  Go調(diào)度器 288
11.2.4  工作共享和竊取 289
11.2.5  不要擔(dān)心調(diào)度器 290
11.2.6  goroutine示例 291
11.3  使用通道通信 291
11.3.1  什么是通道 291
11.3.2  了解通道阻塞/解除阻塞 292
11.3.3  創(chuàng)建通道 292
11.3.4  發(fā)送和接收值 293
11.3.5  一個(gè)簡(jiǎn)單的通道示例 294
11.3.6  在通道上使用range 295
11.3.7  使用select語(yǔ)句監(jiān)聽通道 296
11.3.8  使用select語(yǔ)句 296
11.3.9  通道不是消息隊(duì)列 297
11.4  單向通道 298
11.5  關(guān)閉通道 299
11.5.1  在讀取消息時(shí)檢測(cè)關(guān)閉的通道 301
11.5.2  從已關(guān)閉的通道中讀取數(shù)據(jù)時(shí)返回零值 302
11.5.3  關(guān)閉一個(gè)已經(jīng)關(guān)閉的通道 303
11.5.4  向已關(guān)閉通道中寫入數(shù)據(jù) 304
11.6  帶緩沖的通道 305
11.6.1  簡(jiǎn)單的帶緩沖的通道示例 305
11.6.2  從關(guān)閉的帶緩沖的通道中讀取消息 307
11.7  使用通道捕獲系統(tǒng)信號(hào) 308
11.7.1  os/signal包 309
11.7.2  實(shí)現(xiàn)優(yōu)雅地關(guān)閉 310
11.7.3  監(jiān)聽系統(tǒng)信號(hào) 312
11.7.4  監(jiān)聽關(guān)閉確認(rèn)消息 313
11.7.5  超時(shí)無(wú)響應(yīng)關(guān)閉 314
11.8  本章小結(jié) 315
第 12章 Context 316
12.1  context.Context接口 317
12.1.1  Context的Deadline方法 317
12.1.2  Context的Done方法 317
12.1.3  Context的Err方法 318
12.1.4  Context的Value方法 319
12.1.5  輔助函數(shù) 320
12.1.6  初始Context 321
12.1.7  默認(rèn)實(shí)現(xiàn) 322
12.2  Context規(guī)則 322
12.3  Context節(jié)點(diǎn)層級(jí) 323
12.3.1  理解節(jié)點(diǎn)層級(jí) 323
12.3.2  用Context值包裝 324
12.3.3  接續(xù)Context節(jié)點(diǎn) 324
12.4  Context傳值 326
12.4.1  理解Context傳值 326
12.4.2  鍵解析 328
12.5  字符串作為鍵存在的問題 329
12.5.1  鍵沖突 330
12.5.2  自定義字符串鍵類型 331
12.6  保護(hù)Context中的鍵和值 333
12.7  用Context傳播取消事件 336
12.7.1  創(chuàng)建可取消的Context 337
12.7.2  取消Context 338
12.7.3  監(jiān)聽取消確認(rèn) 340
12.8  超時(shí)和截止時(shí)間 344
12.8.1  在指定時(shí)間點(diǎn)取消 344
12.8.2  一段時(shí)間后取消 345
12.9  Context錯(cuò)誤 346
12.9.1  Context取消錯(cuò)誤 347
12.9.2  超出截止時(shí)間錯(cuò)誤 348
12.10  使用Context監(jiān)聽系統(tǒng)信號(hào) 349
12.11  本章小結(jié) 353
第 13章 同步 354
13.1  使用WaitGroup等待goroutine 354
13.1.1  問題 354
13.1.2  使用WaitGroup 355
13.1.3  Wait方法 356
13.1.4  Add方法 357
13.1.5  Done方法 361
13.1.6  關(guān)于WaitGroup的小結(jié) 365
13.2  使用errgroup.Group進(jìn)行錯(cuò)誤管理 367
13.2.1  問題 367
13.2.2  errgroup.Group類型 369
13.2.3  監(jiān)聽errgroup.Group類型的取消 371
13.2.4  關(guān)于errgroup.Group類型的小結(jié) 373
13.3  數(shù)據(jù)競(jìng)爭(zhēng) 375
13.3.1  競(jìng)爭(zhēng)檢測(cè)器 377
13.3.2  大多數(shù),但不是全部 378
13.3.3  關(guān)于競(jìng)爭(zhēng)檢測(cè)器的小結(jié) 378
13.4  使用互斥鎖同步訪問 379
13.4.1  sync.Locker接口 381
13.4.2  使用互斥鎖 382
13.4.3  讀寫互斥鎖 384
13.4.4  不當(dāng)使用 386
13.4.5  有關(guān)讀/寫互斥鎖的小結(jié) 389
13.5  僅執(zhí)行一次任務(wù) 389
13.5.1  問題 390
13.5.2  實(shí)現(xiàn)一次性操作 391
13.5.3  使用Once關(guān)閉通道 393
13.6  本章小結(jié) 395
第 14章 使用文件 396
14.1  目錄項(xiàng)和文件信息 396
14.1.1  讀取目錄 397
14.1.2  fs.FileInfo接口 399
14.1.3  獲取文件狀態(tài) 400
14.2  遍歷目錄 401
14.3  跳過目錄和文件 404
14.4  創(chuàng)建目錄和子目錄 408
14.5  文件路徑輔助函數(shù) 410
14.5.1  獲取文件的擴(kuò)展名 411
14.5.2  獲取文件所在的目錄 411
14.5.3  獲取文件或目錄的名字 412
14.5.4  使用文件路徑輔助函數(shù) 412
14.5.5  檢查錯(cuò)誤 413
14.6  創(chuàng)建多個(gè)目錄 415
14.7  創(chuàng)建文件 417
14.8  修復(fù)遍歷測(cè)試 422
14.9  向文件中追加內(nèi)容 424
14.10  讀文件 427
14.11  注意Windows系統(tǒng) 428
14.12  fs包 429
14.12.1  fs.FS接口 430
14.12.2  fs.File接口 431
14.13  使用fs.FS接口 432
14.14  模擬文件系統(tǒng) 435
14.15  嵌入文件 438
14.15.1  使用嵌入文件 439
14.15.2  將文件嵌入二進(jìn)制文件中 441
14.15.3  修改嵌入的文件 442
14.15.4  將文件作為string或者byte切片嵌入 443
14.16  本章小結(jié) 443

本目錄推薦

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