Go語(yǔ)言權(quán)威指南 [英]亞當(dāng)·弗里曼(Adam Freeman)
定 價(jià):229 元
- 作者:[英]亞當(dāng)·弗里曼(Adam Freeman)
- 出版時(shí)間:2024/8/1
- ISBN:9787111757672
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8Go
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
Go是一種簡(jiǎn)潔高效的編程語(yǔ)言,由Google設(shè)計(jì),它將強(qiáng)大的靜態(tài)類型與簡(jiǎn)單的語(yǔ)法和全面的標(biāo)準(zhǔn)庫(kù)結(jié)合在一起,支持并發(fā)/并行編程等特性,能讓程序員提高效率。本書(shū)主要面向希望使用Go創(chuàng)建應(yīng)用程序的開(kāi)發(fā)人員,作者講解了如何充分利用Go語(yǔ)言實(shí)現(xiàn)高效程序,從基礎(chǔ)知識(shí)開(kāi)始介紹,逐步過(guò)渡到先進(jìn)且復(fù)雜的特性。你將了解Go語(yǔ)言是如何構(gòu)建在一個(gè)簡(jiǎn)單而一致的類型系統(tǒng)上,進(jìn)而讓你有全面而富有成效的開(kāi)發(fā)體驗(yàn),從而構(gòu)建快速而健壯的跨平臺(tái)運(yùn)行的應(yīng)用程序的。
本書(shū)主要面向希望使用Go創(chuàng)建應(yīng)用程序的開(kāi)發(fā)人員,作者講解了如何充分利用Go語(yǔ)言的優(yōu)勢(shì),他從基礎(chǔ)知識(shí)開(kāi)始介紹,逐步過(guò)渡到先進(jìn)且復(fù)雜的特性。你將了解Go語(yǔ)言如何構(gòu)建在一個(gè)簡(jiǎn)單而一致的類型系統(tǒng)上,讓你有全面而富有成效的開(kāi)發(fā)體驗(yàn),從而構(gòu)建快速而健壯的跨平臺(tái)運(yùn)行的應(yīng)用程序。本書(shū)每章都以一種清晰而簡(jiǎn)潔的方式介紹某些主題,給出了真正需要了解的細(xì)節(jié),同時(shí)給出了常見(jiàn)問(wèn)題以及避免這些問(wèn)題的方法。通過(guò)閱讀本書(shū),你將: 對(duì)Go語(yǔ)言和相關(guān)工具有扎實(shí)的理解; 深入了解Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)的知識(shí); 能夠使用Go完成并發(fā)/并行任務(wù); 使用Go進(jìn)行客戶端和服務(wù)器端開(kāi)發(fā)。
本書(shū)概要
Go(也經(jīng)常被稱為Golang)是最初由Google 開(kāi)發(fā)的一種開(kāi)發(fā)語(yǔ)言,現(xiàn)在已得到廣泛使用。Go在語(yǔ)法上類似于C,但它有安全指針、自動(dòng)內(nèi)存管理功能,以及非常有用且寫(xiě)得非常好的標(biāo)準(zhǔn)庫(kù)。
為什么應(yīng)該學(xué)習(xí)Go
Go 幾乎可用于任何編程任務(wù),但它最適合服務(wù)器開(kāi)發(fā)或系統(tǒng)開(kāi)發(fā)。它巨大的標(biāo)準(zhǔn)庫(kù)包含了對(duì)大多數(shù)常見(jiàn)的服務(wù)器端任務(wù)(例如處理HTTP 請(qǐng)求、訪問(wèn)SQL 數(shù)據(jù)庫(kù)以及渲染HTML 模板等)的支持。它具有出色的線程支持,以及一個(gè)完善的反射(reflection)系統(tǒng),通過(guò)反射系統(tǒng)我們可以為平臺(tái)和框架編寫(xiě)非常靈活的API。Go 自帶一套完整的開(kāi)發(fā)工具,并具有良好的編輯器支持,很容易打造高效的開(kāi)發(fā)環(huán)境。Go 是跨平臺(tái)的。例如,你可以在Windows 上編寫(xiě)程序并將之部署在Linux 服務(wù)器上,也可以像我在本書(shū)中演示的那樣,將應(yīng)用程序打包到Docker 容器中,輕松將其部署到一些公有云平臺(tái)上。
Go 有什么問(wèn)題
Go 可能很難學(xué)習(xí),它是一種比較“固執(zhí)”的語(yǔ)言,用起來(lái)可能會(huì)令人郁悶。這種固執(zhí)體現(xiàn)在從其極具“洞察性”到“令人討厭”的方方面面。洞察性體現(xiàn)在它提供了一些新鮮愉快的體驗(yàn),如允許函數(shù)返回多個(gè)值,這樣就可以避免用一個(gè)返回值既表示成功又表示失敗的結(jié)果。Go有一些很出色的特性,包括但不限于簡(jiǎn)單直觀的線程支持等。如果其他語(yǔ)言也能實(shí)現(xiàn)這些特性的話,將會(huì)大有裨益。令人討厭的方面體現(xiàn)在,用Go 寫(xiě)程序就像是與編譯器進(jìn)行一場(chǎng)曠日持久的爭(zhēng)論—一種編程和“另一件事”之間的爭(zhēng)論。如果你的代碼風(fēng)格與Go 設(shè)計(jì)者的風(fēng)格不一致,你很可能看到很多編譯器錯(cuò)誤。如果你像我一樣寫(xiě)了很多年代碼并且從多種語(yǔ)言中養(yǎng)成了根深蒂固的習(xí)慣,那么當(dāng)編譯器反復(fù)拒絕你在過(guò)去30 年的很多主流語(yǔ)言中都能正確編譯的代碼表達(dá)式和語(yǔ)句時(shí),你會(huì)發(fā)現(xiàn)任何語(yǔ)言都無(wú)法表達(dá)你的憤怒。此外,Go 明顯側(cè)重于系統(tǒng)編程和服務(wù)器開(kāi)發(fā)。確實(shí)有些包提供了對(duì)UI 開(kāi)發(fā)的支持,但UI開(kāi)發(fā)并不是Go 擅長(zhǎng)的領(lǐng)域,而且你能找到更好的替代品。
你需要了解什么
這是一本為經(jīng)驗(yàn)豐富的開(kāi)發(fā)者編寫(xiě)的高級(jí)書(shū)籍。本書(shū)不教大家如何編程,并且你需要了些一些相關(guān)的知識(shí)(如HTML 等)才能理解本書(shū)所有示例。
本書(shū)的結(jié)構(gòu)
本書(shū)分為三部分,每一部分都涵蓋一組相關(guān)的主題。
第一部分:理解Go 語(yǔ)言
本書(shū)第一部分描述Go 開(kāi)發(fā)工具和Go 語(yǔ)言本身。我將介紹Go 語(yǔ)言內(nèi)置數(shù)據(jù)類型,演示如何創(chuàng)建自定義數(shù)據(jù)類型,介紹流控制、錯(cuò)誤處理以及并發(fā)編程等特性。這些章節(jié)包含來(lái)自Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)的一些特性,Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)要么有助于解釋這些Go 語(yǔ)言特性,要么與我們要描述的特性密切相關(guān)。
第二部分:使用Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)
在本書(shū)第二部分,我將介紹Go 的巨大標(biāo)準(zhǔn)庫(kù)中提供的最有用的那些包(package)。你將學(xué)會(huì)如何進(jìn)行字符串格式化、數(shù)據(jù)讀寫(xiě)、HTTP 服務(wù)器和客戶端創(chuàng)建、數(shù)據(jù)庫(kù)使用以及如何有效利用強(qiáng)大的反射功能。
第三部分:應(yīng)用Go 語(yǔ)言
在本書(shū)第三部分,我將使用Go 語(yǔ)言創(chuàng)建一個(gè)自定義的Web 應(yīng)用程序框架,并將它作為名為SportsStore 的在線商店的基礎(chǔ)。這一部分將展示如何使用Go 語(yǔ)言及其標(biāo)準(zhǔn)庫(kù)來(lái)解決實(shí)際項(xiàng)目中出現(xiàn)的各種問(wèn)題。本書(shū)第一部分和第二部分中的示例一次只關(guān)注一個(gè)特性,而第三部分則展示如何將多種特性結(jié)合在一起使用。
本書(shū)不包括什么
本書(shū)并沒(méi)有覆蓋Go 語(yǔ)言標(biāo)準(zhǔn)庫(kù)中所有的包。正如前面已經(jīng)指出的那樣,Go 語(yǔ)言的包太多了。此外,我還省略了一些在主流開(kāi)發(fā)中不常用的包。本書(shū)中描述的特性都是大多數(shù)讀者在大多數(shù)情況下都要用到的。
如果你想學(xué)習(xí)一個(gè)特性,但本書(shū)中沒(méi)有提到,請(qǐng)與我聯(lián)系。我會(huì)維護(hù)一個(gè)特性列表,并將呼聲最高的一些主題加到未來(lái)的版本中去。
如果在本書(shū)中發(fā)現(xiàn)錯(cuò)誤該怎么辦
你可以發(fā)郵件至adam@adam-freeman.com 。當(dāng)然在發(fā)郵件之前,建議先看一下本書(shū)的勘誤表—見(jiàn)本書(shū)的GitHub 存儲(chǔ)庫(kù)(https://github.com/apress/pro-go),很可能別人已經(jīng)發(fā)現(xiàn)了同一個(gè)錯(cuò)誤。我會(huì)將勘誤信息加到GitHub 存儲(chǔ)庫(kù)中的errata/corrections 文件中,特別是示例代碼中的錯(cuò)誤。非常感謝第一位匯報(bào)這些問(wèn)題的讀者。對(duì)于一些不嚴(yán)重的問(wèn)題,比如示例代碼外圍的解釋等,我也會(huì)維護(hù)一個(gè)列表,并將在新版本中更新它們。
Adam Freeman是一位經(jīng)驗(yàn)豐富的IT專家,曾在一系列公司擔(dān)任高級(jí)職務(wù),最近擔(dān)任的是一家全球性銀行的首席技術(shù)官和首席運(yùn)營(yíng)官,F(xiàn)在退休了,他把時(shí)間花在寫(xiě)作和長(zhǎng)跑上。
目 錄
第一部分 理解Go語(yǔ)言
第1章 第一個(gè)Go應(yīng)用程序2
1.1 設(shè)置場(chǎng)景2
1.2 安裝開(kāi)發(fā)工具2
1.3 創(chuàng)建項(xiàng)目3
1.4 定義數(shù)據(jù)類型和集合5
1.5 創(chuàng)建HTML模板6
1.6 創(chuàng)建HTTP處理程序和服務(wù)器12
1.7 編寫(xiě)表單處理函數(shù)15
1.8 添加數(shù)據(jù)驗(yàn)證功能19
1.9 小結(jié)21
第2章 本書(shū)概要22
2.1 為什么應(yīng)該學(xué)習(xí)Go22
2.2 Go有什么問(wèn)題22
2.3 真有那么糟糕嗎23
2.4 你需要了解什么23
2.5 本書(shū)的結(jié)構(gòu)23
2.6 本書(shū)不包括什么24
2.7 如果在本書(shū)中發(fā)現(xiàn)錯(cuò)誤該怎么辦24
2.8 有很多示例嗎24
2.9 運(yùn)行示例需要什么軟件26
2.10 小結(jié)27
第3章 Go工具28
3.1 使用go命令28
3.2 創(chuàng)建Go項(xiàng)目29
3.3 編譯并運(yùn)行源代碼31
3.4 調(diào)試Go代碼32
3.5 審查Go代碼36
3.6 修復(fù)Go代碼中的常見(jiàn)問(wèn)題41
3.7 格式化Go代碼43
3.8 小結(jié)44
第4章 基本類型、值和指針45
4.1 為本章做準(zhǔn)備46
4.2 使用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)46
4.3 了解基本數(shù)據(jù)類型48
4.4 使用常量49
4.5 使用變量52
4.6 使用空白標(biāo)識(shí)符57
4.7 了解指針58
4.8 小結(jié)65
第5章 運(yùn)算和轉(zhuǎn)換66
5.1 為本章做準(zhǔn)備67
5.2 了解Go運(yùn)算符67
5.3 轉(zhuǎn)換、解析和格式化值75
5.4 小結(jié)88
第6章 流控制89
6.1 為本章做準(zhǔn)備90
6.2 流控制90
6.3 使用if語(yǔ)句91
6.4 使用for循環(huán)96
6.5 使用switch語(yǔ)句102
6.6 使用標(biāo)簽語(yǔ)句109
6.7 小結(jié)110
第7章 數(shù)組、切片和map111
7.1 為本章做準(zhǔn)備112
7.2 使用數(shù)組113
7.3 使用切片118
7.4 使用map134
7.5 理解字符串的雙重性質(zhì)139
7.6 小結(jié)145
第8章 函數(shù)146
8.1 為本章做準(zhǔn)備147
8.2 定義簡(jiǎn)單函數(shù)147
8.3 定義和使用函數(shù)參數(shù)148
8.4 定義和使用函數(shù)結(jié)果155
8.5 使用defer關(guān)鍵字162
8.6 小結(jié)163
第9章 函數(shù)類型164
9.1 為本章做準(zhǔn)備165
9.2 了解函數(shù)類型165
9.3 創(chuàng)建函數(shù)類型別名170
9.4 使用函數(shù)文字語(yǔ)法171
9.5 小結(jié)182
第10章 結(jié)構(gòu)183
10.1 為本章做準(zhǔn)備184
10.2 定義和使用結(jié)構(gòu)184
10.3 創(chuàng)建包含結(jié)構(gòu)值的數(shù)組、
切片和map193
10.4 了解結(jié)構(gòu)和指針194
10.5 小結(jié)205
第11章 方法和接口206
11.1 為本章做準(zhǔn)備207
11.2 定義和使用方法208
11.3 將類型和方法放在單獨(dú)的
文件中217
11.4 定義和使用接口218
11.5 比較接口值225
11.6 執(zhí)行類型斷言226
11.7 使用空接口229
11.8 小結(jié)233
第12章 包234
12.1 為本章做準(zhǔn)備235
12.2 了解模塊文件235
12.3 創(chuàng)建自定義包236
12.4 使用外部包247
12.5 小結(jié)250
第13章 類型和接口組合251
13.1 為本章做準(zhǔn)備251
13.2 了解類型組合252
13.3 組合類型254
13.4 了解組合和接口261
13.5 小結(jié)267
第14章 goroutine和通道268
14.1 為本章做準(zhǔn)備269
14.2 Go語(yǔ)言如何執(zhí)行代碼271
14.3 創(chuàng)建額外的goroutine272
14.4 從goroutine返回結(jié)果276
14.5 使用通道280
14.6 使用select語(yǔ)句293
14.7 小結(jié)300
第15章 錯(cuò)誤處理301
15.1 為本章做準(zhǔn)備302
15.2 處理可恢復(fù)的錯(cuò)誤303
15.3 處理不可恢復(fù)的錯(cuò)誤309
15.4 小結(jié)316
第二部分 使用Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)
第16章 字符串處理和正則表達(dá)式318
16.1 為本章做準(zhǔn)備319
16.2 處理字符串319
16.3 使用正則表達(dá)式336
16.4 小結(jié)344
第17章 格式化和掃描字符串345
17.1 為本章做準(zhǔn)備346
17.2 書(shū)寫(xiě)字符串347
17.3 格式化字符串348
17.4 掃描字符串356
17.5 小結(jié)361
第18章 數(shù)學(xué)函數(shù)和數(shù)據(jù)排序362
18.1 為本章做準(zhǔn)備363
18.2 使用數(shù)字363
18.3 數(shù)據(jù)排序368
18.4 小結(jié)376
第19章 日期、時(shí)間和時(shí)長(zhǎng)377
19.1 為本章做準(zhǔn)備378
19.2 使用日期和時(shí)間378
19.3 goroutine和通道的時(shí)間特性392
19.4 小結(jié)399
第20章 讀取和寫(xiě)入數(shù)據(jù)400
20.1 為本章做準(zhǔn)備401
20.2 了解讀取器和書(shū)寫(xiě)器402
20.3 為讀取器和書(shū)寫(xiě)器使用工具
函數(shù)405
20.4 使用專門(mén)的讀取器和書(shū)寫(xiě)器406
20.5 緩沖數(shù)據(jù)412
20.6 用讀取器和書(shū)寫(xiě)器格式化和
掃描數(shù)據(jù)419
20.7 小結(jié)422
第21章 使用JSON數(shù)據(jù)423
21.1 為本章做準(zhǔn)備424
21.2 讀取和寫(xiě)入JSON數(shù)據(jù)424
21.3 小結(jié)443
第22章 使用文件444
22.1 為本章做準(zhǔn)備445
22.2 讀取文件446
22.3 將數(shù)據(jù)寫(xiě)入文件451
22.4 使用便利函數(shù)創(chuàng)建新文件455
22.5 使用文件路徑456
22.6 管理文件和目錄458
22.7 探索文件系統(tǒng)460
22.8 小結(jié)464
第23章 HTML和文本模板465
23.1 為本章做準(zhǔn)備466
23.2 創(chuàng)建HTML模板467
23.3 創(chuàng)建文本模板488
23.4 小結(jié)490
第24章 創(chuàng)建HTTP服務(wù)器491
24.1 為本章做準(zhǔn)備492
24.2 創(chuàng)建簡(jiǎn)單的HTTP服務(wù)器493
24.3 創(chuàng)建靜態(tài)HTTP服務(wù)器504
24.4 使用模板生成響應(yīng)507
24.5 響應(yīng)JSON數(shù)據(jù)509
24.6 處理表單數(shù)據(jù)510
24.7 讀取和設(shè)置Cookie517
24.8 小結(jié)519
第25章 創(chuàng)建HTTP客戶端520
25.1 為本章做準(zhǔn)備521
25.2 發(fā)送HTTP請(qǐng)求524
25.3 配置HTTP客戶端請(qǐng)求530
25.4 創(chuàng)建多部分表單540
25.5 小結(jié)543
第26章 使用數(shù)據(jù)庫(kù)544
26.1 為本章做準(zhǔn)備545
26.2 安裝數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序547
26.3 打開(kāi)數(shù)據(jù)庫(kù)547
26.4 執(zhí)行語(yǔ)句和查詢549
26.5 使用預(yù)編譯語(yǔ)句559
26.6 使用事務(wù)562
26.7 使用反射將數(shù)據(jù)掃描到結(jié)構(gòu)中563
26.8 小結(jié)567
第27章 使用反射:第1部分568
27.1 為本章做準(zhǔn)備569
27.2 了解反射的必要性570
27.3 使用反射的基本特性572
27.4 識(shí)別類型578
27.5 獲取底層值581
27.6 使用反射設(shè)置值582
27.7 比較值586
27.8 轉(zhuǎn)換值588
27.9 創(chuàng)建新值591
27.10 小結(jié)593
第28章 使用反射:第2部分594
28.1 為本章做準(zhǔn)備594
28.2 使用指針595
28.3 使用數(shù)組和切片類型597
28.4 使用數(shù)組和切片值598
28.5 使用map類型603
28.6 使用map值604
28.7 使用結(jié)構(gòu)類型608
28.8 使用結(jié)構(gòu)值615
28.9 小結(jié)618
第29章 使用反射:第3部分619
29.1 為本章做準(zhǔn)備619
29.2 使用函數(shù)類型621
29.3 使用函數(shù)值622
29.4 使用方法627
29.5 使用接口630
29.6 使用通道類型634
29.7 使用通道值635
29.8 創(chuàng)建新的通道類型和值636
29.9 從多個(gè)通道中選擇接收637
29.10 小結(jié)639
第30章 協(xié)調(diào)goroutine640
30.1 為本章做準(zhǔn)備641
30.2 使用等待組641
30.3 使用互斥644
30.4 使用條件來(lái)協(xié)調(diào)goroutine649
30.5 確保函數(shù)僅執(zhí)行一次652
30.6 使用Context654
30.7 小結(jié)660
第31章 單元測(cè)試、基準(zhǔn)測(cè)試和日志661
31.1 為本章做準(zhǔn)備661
31.2 使用測(cè)試662
31.3 基準(zhǔn)代碼669
31.4 寫(xiě)日志673
31.5 小結(jié)676
第三部分 應(yīng)用Go語(yǔ)言
第32章 創(chuàng)建Web平臺(tái)678
32.1 創(chuàng)建項(xiàng)目678
32.2 創(chuàng)建一些基本的平臺(tái)功能679
32.3 通過(guò)依賴注入管理服務(wù)687
32.4 小結(jié)698
第33章 中間件、模板和處理程序699
33.1 創(chuàng)建請(qǐng)求處理流水線699
33.2 創(chuàng)建HTML響應(yīng)713
33.3 引入請(qǐng)求處理程序719
33.4 小結(jié)729
第34章 操作、會(huì)話和授權(quán)730
34.1 引入操作結(jié)果730
34.2 在模板中調(diào)用請(qǐng)求處理程序735
34.3 從路由中生成URL741
34.4 定義別名路由745
34.5 驗(yàn)證請(qǐng)求數(shù)據(jù)747
34.6 添加會(huì)話753
34.7 添加用戶授權(quán)功能759
34.8 小結(jié)770
第35章 SportsStore:一個(gè)真正的
應(yīng)用程序771
35.1 創(chuàng)建SportsStore項(xiàng)目771
35.2 啟動(dòng)數(shù)據(jù)模型773
35.3 顯示產(chǎn)品列表776
35.4 添加分頁(yè)779
35.5 為模板內(nèi)容添加樣式782
35.6 添加類別過(guò)濾支持784
35.7 小結(jié)790
第36章 SportsStore:購(gòu)物車和
數(shù)據(jù)庫(kù)791
36.1 構(gòu)建購(gòu)物車791
36.2 使用數(shù)據(jù)庫(kù)存儲(chǔ)802
36.3 小結(jié)812
第37章 SportsStore:結(jié)賬和管理813
37.1 創(chuàng)建結(jié)賬流程813
37.2 創(chuàng)建管理功能826
37.3 小結(jié)842
第38章 SportsStore:完成與部署843
38.1 完成管理功能843
38.2 限制對(duì)管理功能的訪問(wèn)848
38.3 創(chuàng)建Web服務(wù)854
38.4 準(zhǔn)備部署856
38.5 小結(jié)860