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

Go語言編程指南

Go語言編程指南

定 價:¥119.80

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

購買這本書可以去


ISBN: 9787115636218 出版時間: 2024-06-01 包裝: 平裝-膠訂
開本: 16開 頁數(shù): 字數(shù):  

內(nèi)容簡介

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

作者簡介

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

圖書目錄

目錄
 
第 1章 模塊、包和依賴 1
1.1  模塊 1
1.1.1  工具鏈 2
1.1.2  初始化一個模塊 3
1.1.3  版本控制系統(tǒng)與模塊 3
1.2  包 4
1.2.1  什么是包 4
1.2.2  包命名 4
1.3  文件夾、文件與代碼組織 6
1.3.1  同一文件夾下的多個包 7
1.3.2  文件命名 8
1.3.3  包組織 8
1.4  導入包和模塊 11
1.4.1  導入路徑 12
1.4.2  使用import關(guān)鍵字 13
1.4.3  解決導入包的名字沖突問題 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  語義版本 20
1.5.6  多版本 20
1.5.7  循環(huán)導入 21
1.6  本章小結(jié) 23
第 2章 Go語言基礎(chǔ) 24
2.1  Go語言概述 24
2.1.1  靜態(tài)類型 24
2.1.2  垃圾回收 25
2.1.3  編譯 25
2.1.4  關(guā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  無類型常量(推斷類型) 43
2.6.3  類型推斷 44
2.7  標識符命名 45
2.7.1  命名風格 46
2.7.2  與包名沖突 47
2.7.3  通過首字母大寫實現(xiàn)標識符導出 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  格式化浮點型 57
2.8.9  打印值的類型 58
2.8.10  打印值 59
2.8.11  打印值的更多細節(jié) 59
2.8.12  以Go語法格式打印值 60
2.8.13  錯誤使用格式化控制符 61
2.8.14  顯式的實參索引 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  識別差異 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  向切片追加一個切片 74
3.2  切片的工作原理 77
3.2.1  長度與容量 78
3.2.2  切片的擴容 79
3.2.3  使用make函數(shù)創(chuàng)建切片 81
3.2.4  使用帶長度和容量參數(shù)的make函數(shù) 82
3.2.5  make與append函數(shù) 83
3.2.6  切片擴容時發(fā)生了什么 83
3.2.7  子切片 85
3.2.8  修改子切片 85
3.2.9  復制切片 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  長度和容量 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  僅測試鍵的存在性 104
4.1.12  map和復雜值 105
4.1.13  插入時復制 106
4.1.14  列出map中的鍵 108
4.2  if語句 111
4.2.1  else語句 111
4.2.2  else if 語句 112
4.2.3  賦值作用域 113
4.2.4  邏輯和數(shù)學運算符 115
4.3  switch語句 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  擴展切片 131
5.2.3  何時使用可變參數(shù) 132
5.3  延遲函數(shù)調(diào)用 133
5.3.1  多個返回路徑下的延遲執(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  多個init函數(shù) 139
5.4.2  init函數(shù)的執(zhí)行順序 140
5.4.3  利用init函數(shù)的導入副作用 140
5.5  本章小結(jié) 142
第6章 結(jié)構(gòu)體、方法和指針 143
6.1  結(jié)構(gòu)體 143
6.1.1  在Go語言中聲明新類型 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)體標簽 148
6.1.7  編碼用的結(jié)構(gòu)體標簽 148
6.1.8  使用結(jié)構(gòu)體標簽 150
6.2  方法 150
6.2.1  方法與函數(shù)的不同 151
6.2.2  方法表達式 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章 測試 167
7.1  測試基礎(chǔ) 167
7.1.1  命名 167
7.1.2  testing.T類型 168
7.1.3  標記測試失敗 169
7.1.4  使用t.Error 170
7.1.5  使用T.Fatal(推薦) 172
7.1.6  精心編寫測試失敗的信息 173
7.2  代碼覆蓋率 174
7.2.1  代碼覆蓋率基礎(chǔ) 174
7.2.2  生成覆蓋率報告 174
7.2.3  go tool cover命令 175
7.2.4  生成HTML覆蓋率報告 176
7.2.5  編輯器支持 177
7.3  表驅(qū)動測試 178
7.3.1  表驅(qū)動測試剖析 178
7.3.2  編寫表驅(qū)動測試 179
7.3.3  子測試 181
7.3.4  子測試剖析 181
7.3.5  編寫子測試 182
7.4  運行測試 183
7.4.1  運行指定包的測試 183
7.4.2  運行當前包及子包中的測試 183
7.4.3  輸出測試詳細信息 183
7.4.4  在測試中輸出日志 184
7.4.5  短測試 185
7.4.6  并行運行包測試 186
7.4.7  并行運行測試 186
7.4.8  運行特定的測試 187
7.4.9  設(shè)置測試超時時間 188
7.4.10  快速失敗 189
7.4.11  禁用測試緩存 190
7.5  測試輔助函數(shù) 190
7.5.1  定義測試輔助函數(shù) 190
7.5.2  將函數(shù)標記為測試輔助函數(shù) 194
7.5.3  清理測試輔助函數(shù)的資源 195
7.6  本章小結(jié) 196
第8章 接口 197
8.1  具體類型VS.接口 197
8.2  顯式接口實現(xiàn) 199
8.3  隱式接口實現(xiàn) 200
8.4  使用接口之前 201
8.5  使用接口 202
8.6  實現(xiàn)io.Writer接口 204
8.7  多個接口 206
8.8  斷言接口實現(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  實現(xiàn)接口 211
8.11  嵌入接口 212
8.12  類型斷言 214
8.12.1  對斷言進行斷言 214
8.12.2  斷言具體類型 215
8.13  通過switch語句進行斷言 215
8.13.1  捕獲switch語句中的類型斷言結(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章 錯誤 220
9.1  錯誤作為值 220
9.1.1  error 接口 222
9.1.2  處理錯誤 223
9.1.3  使用錯誤 224
9.2  panic 225
9.2.1  引發(fā)panic 225
9.2.2  從panic狀態(tài)恢復 226
9.2.3  捕獲并返回panic值 229
9.3  不要主動拋出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  自定義錯誤 246
9.4.1  標準錯誤 247
9.4.2  實現(xiàn)自定義錯誤 248
9.5  包裝錯誤和解包裝錯誤 250
9.5.1  包裝錯誤 252
9.5.2  解包裝錯誤 253
9.5.3  解包裝自定義錯誤 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ù) 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語言中的并發(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  不要擔心調(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  一個簡單的通道示例 294
11.3.6  在通道上使用range 295
11.3.7  使用select語句監(jiān)聽通道 296
11.3.8  使用select語句 296
11.3.9  通道不是消息隊列 297
11.4  單向通道 298
11.5  關(guān)閉通道 299
11.5.1  在讀取消息時檢測關(guān)閉的通道 301
11.5.2  從已關(guān)閉的通道中讀取數(shù)據(jù)時返回零值 302
11.5.3  關(guān)閉一個已經(jīng)關(guān)閉的通道 303
11.5.4  向已關(guān)閉通道中寫入數(shù)據(jù) 304
11.6  帶緩沖的通道 305
11.6.1  簡單的帶緩沖的通道示例 305
11.6.2  從關(guān)閉的帶緩沖的通道中讀取消息 307
11.7  使用通道捕獲系統(tǒng)信號 308
11.7.1  os/signal包 309
11.7.2  實現(xiàn)優(yōu)雅地關(guān)閉 310
11.7.3  監(jiān)聽系統(tǒng)信號 312
11.7.4  監(jiān)聽關(guān)閉確認消息 313
11.7.5  超時無響應關(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  默認實現(xiàn) 322
12.2  Context規(guī)則 322
12.3  Context節(jié)點層級 323
12.3.1  理解節(jié)點層級 323
12.3.2  用Context值包裝 324
12.3.3  接續(xù)Context節(jié)點 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  保護Context中的鍵和值 333
12.7  用Context傳播取消事件 336
12.7.1  創(chuàng)建可取消的Context 337
12.7.2  取消Context 338
12.7.3  監(jiān)聽取消確認 340
12.8  超時和截止時間 344
12.8.1  在指定時間點取消 344
12.8.2  一段時間后取消 345
12.9  Context錯誤 346
12.9.1  Context取消錯誤 347
12.9.2  超出截止時間錯誤 348
12.10  使用Context監(jiān)聽系統(tǒng)信號 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進行錯誤管理 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ù)競爭 375
13.3.1  競爭檢測器 377
13.3.2  大多數(shù),但不是全部 378
13.3.3  關(guān)于競爭檢測器的小結(jié) 378
13.4  使用互斥鎖同步訪問 379
13.4.1  sync.Locker接口 381
13.4.2  使用互斥鎖 382
13.4.3  讀寫互斥鎖 384
13.4.4  不當使用 386
13.4.5  有關(guān)讀/寫互斥鎖的小結(jié) 389
13.5  僅執(zhí)行一次任務 389
13.5.1  問題 390
13.5.2  實現(xiàn)一次性操作 391
13.5.3  使用Once關(guān)閉通道 393
13.6  本章小結(jié) 395
第 14章 使用文件 396
14.1  目錄項和文件信息 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  獲取文件的擴展名 411
14.5.2  獲取文件所在的目錄 411
14.5.3  獲取文件或目錄的名字 412
14.5.4  使用文件路徑輔助函數(shù) 412
14.5.5  檢查錯誤 413
14.6  創(chuàng)建多個目錄 415
14.7  創(chuàng)建文件 417
14.8  修復遍歷測試 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  將文件嵌入二進制文件中 441
14.15.3  修改嵌入的文件 442
14.15.4  將文件作為string或者byte切片嵌入 443
14.16  本章小結(jié) 443

本目錄推薦

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