Go語言權(quán)威指南 [英]亞當(dāng)·弗里曼(Adam Freeman)
定 價:229 元
- 作者:[英]亞當(dāng)·弗里曼(Adam Freeman)
- 出版時間:2024/8/1
- ISBN:9787111757672
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8Go
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
Go是一種簡潔高效的編程語言,由Google設(shè)計(jì),它將強(qiáng)大的靜態(tài)類型與簡單的語法和全面的標(biāo)準(zhǔn)庫結(jié)合在一起,支持并發(fā)/并行編程等特性,能讓程序員提高效率。本書主要面向希望使用Go創(chuàng)建應(yīng)用程序的開發(fā)人員,作者講解了如何充分利用Go語言實(shí)現(xiàn)高效程序,從基礎(chǔ)知識開始介紹,逐步過渡到先進(jìn)且復(fù)雜的特性。你將了解Go語言是如何構(gòu)建在一個簡單而一致的類型系統(tǒng)上,進(jìn)而讓你有全面而富有成效的開發(fā)體驗(yàn),從而構(gòu)建快速而健壯的跨平臺運(yùn)行的應(yīng)用程序的。
本書主要面向希望使用Go創(chuàng)建應(yīng)用程序的開發(fā)人員,作者講解了如何充分利用Go語言的優(yōu)勢,他從基礎(chǔ)知識開始介紹,逐步過渡到先進(jìn)且復(fù)雜的特性。你將了解Go語言如何構(gòu)建在一個簡單而一致的類型系統(tǒng)上,讓你有全面而富有成效的開發(fā)體驗(yàn),從而構(gòu)建快速而健壯的跨平臺運(yùn)行的應(yīng)用程序。本書每章都以一種清晰而簡潔的方式介紹某些主題,給出了真正需要了解的細(xì)節(jié),同時給出了常見問題以及避免這些問題的方法。通過閱讀本書,你將: 對Go語言和相關(guān)工具有扎實(shí)的理解; 深入了解Go語言標(biāo)準(zhǔn)庫的知識; 能夠使用Go完成并發(fā)/并行任務(wù); 使用Go進(jìn)行客戶端和服務(wù)器端開發(fā)。
本書概要
Go(也經(jīng)常被稱為Golang)是最初由Google 開發(fā)的一種開發(fā)語言,現(xiàn)在已得到廣泛使用。Go在語法上類似于C,但它有安全指針、自動內(nèi)存管理功能,以及非常有用且寫得非常好的標(biāo)準(zhǔn)庫。
為什么應(yīng)該學(xué)習(xí)Go
Go 幾乎可用于任何編程任務(wù),但它最適合服務(wù)器開發(fā)或系統(tǒng)開發(fā)。它巨大的標(biāo)準(zhǔn)庫包含了對大多數(shù)常見的服務(wù)器端任務(wù)(例如處理HTTP 請求、訪問SQL 數(shù)據(jù)庫以及渲染HTML 模板等)的支持。它具有出色的線程支持,以及一個完善的反射(reflection)系統(tǒng),通過反射系統(tǒng)我們可以為平臺和框架編寫非常靈活的API。Go 自帶一套完整的開發(fā)工具,并具有良好的編輯器支持,很容易打造高效的開發(fā)環(huán)境。Go 是跨平臺的。例如,你可以在Windows 上編寫程序并將之部署在Linux 服務(wù)器上,也可以像我在本書中演示的那樣,將應(yīng)用程序打包到Docker 容器中,輕松將其部署到一些公有云平臺上。
Go 有什么問題
Go 可能很難學(xué)習(xí),它是一種比較“固執(zhí)”的語言,用起來可能會令人郁悶。這種固執(zhí)體現(xiàn)在從其極具“洞察性”到“令人討厭”的方方面面。洞察性體現(xiàn)在它提供了一些新鮮愉快的體驗(yàn),如允許函數(shù)返回多個值,這樣就可以避免用一個返回值既表示成功又表示失敗的結(jié)果。Go有一些很出色的特性,包括但不限于簡單直觀的線程支持等。如果其他語言也能實(shí)現(xiàn)這些特性的話,將會大有裨益。令人討厭的方面體現(xiàn)在,用Go 寫程序就像是與編譯器進(jìn)行一場曠日持久的爭論—一種編程和“另一件事”之間的爭論。如果你的代碼風(fēng)格與Go 設(shè)計(jì)者的風(fēng)格不一致,你很可能看到很多編譯器錯誤。如果你像我一樣寫了很多年代碼并且從多種語言中養(yǎng)成了根深蒂固的習(xí)慣,那么當(dāng)編譯器反復(fù)拒絕你在過去30 年的很多主流語言中都能正確編譯的代碼表達(dá)式和語句時,你會發(fā)現(xiàn)任何語言都無法表達(dá)你的憤怒。此外,Go 明顯側(cè)重于系統(tǒng)編程和服務(wù)器開發(fā)。確實(shí)有些包提供了對UI 開發(fā)的支持,但UI開發(fā)并不是Go 擅長的領(lǐng)域,而且你能找到更好的替代品。
你需要了解什么
這是一本為經(jīng)驗(yàn)豐富的開發(fā)者編寫的高級書籍。本書不教大家如何編程,并且你需要了些一些相關(guān)的知識(如HTML 等)才能理解本書所有示例。
本書的結(jié)構(gòu)
本書分為三部分,每一部分都涵蓋一組相關(guān)的主題。
第一部分:理解Go 語言
本書第一部分描述Go 開發(fā)工具和Go 語言本身。我將介紹Go 語言內(nèi)置數(shù)據(jù)類型,演示如何創(chuàng)建自定義數(shù)據(jù)類型,介紹流控制、錯誤處理以及并發(fā)編程等特性。這些章節(jié)包含來自Go 語言標(biāo)準(zhǔn)庫的一些特性,Go 語言標(biāo)準(zhǔn)庫要么有助于解釋這些Go 語言特性,要么與我們要描述的特性密切相關(guān)。
第二部分:使用Go 語言標(biāo)準(zhǔn)庫
在本書第二部分,我將介紹Go 的巨大標(biāo)準(zhǔn)庫中提供的最有用的那些包(package)。你將學(xué)會如何進(jìn)行字符串格式化、數(shù)據(jù)讀寫、HTTP 服務(wù)器和客戶端創(chuàng)建、數(shù)據(jù)庫使用以及如何有效利用強(qiáng)大的反射功能。
第三部分:應(yīng)用Go 語言
在本書第三部分,我將使用Go 語言創(chuàng)建一個自定義的Web 應(yīng)用程序框架,并將它作為名為SportsStore 的在線商店的基礎(chǔ)。這一部分將展示如何使用Go 語言及其標(biāo)準(zhǔn)庫來解決實(shí)際項(xiàng)目中出現(xiàn)的各種問題。本書第一部分和第二部分中的示例一次只關(guān)注一個特性,而第三部分則展示如何將多種特性結(jié)合在一起使用。
本書不包括什么
本書并沒有覆蓋Go 語言標(biāo)準(zhǔn)庫中所有的包。正如前面已經(jīng)指出的那樣,Go 語言的包太多了。此外,我還省略了一些在主流開發(fā)中不常用的包。本書中描述的特性都是大多數(shù)讀者在大多數(shù)情況下都要用到的。
如果你想學(xué)習(xí)一個特性,但本書中沒有提到,請與我聯(lián)系。我會維護(hù)一個特性列表,并將呼聲最高的一些主題加到未來的版本中去。
如果在本書中發(fā)現(xiàn)錯誤該怎么辦
你可以發(fā)郵件至adam@adam-freeman.com 。當(dāng)然在發(fā)郵件之前,建議先看一下本書的勘誤表—見本書的GitHub 存儲庫(https://github.com/apress/pro-go),很可能別人已經(jīng)發(fā)現(xiàn)了同一個錯誤。我會將勘誤信息加到GitHub 存儲庫中的errata/corrections 文件中,特別是示例代碼中的錯誤。非常感謝第一位匯報(bào)這些問題的讀者。對于一些不嚴(yán)重的問題,比如示例代碼外圍的解釋等,我也會維護(hù)一個列表,并將在新版本中更新它們。
Adam Freeman是一位經(jīng)驗(yàn)豐富的IT專家,曾在一系列公司擔(dān)任高級職務(wù),最近擔(dān)任的是一家全球性銀行的首席技術(shù)官和首席運(yùn)營官,F(xiàn)在退休了,他把時間花在寫作和長跑上。
目 錄
第一部分 理解Go語言
第1章 第一個Go應(yīng)用程序2
1.1 設(shè)置場景2
1.2 安裝開發(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 編寫表單處理函數(shù)15
1.8 添加數(shù)據(jù)驗(yàn)證功能19
1.9 小結(jié)21
第2章 本書概要22
2.1 為什么應(yīng)該學(xué)習(xí)Go22
2.2 Go有什么問題22
2.3 真有那么糟糕嗎23
2.4 你需要了解什么23
2.5 本書的結(jié)構(gòu)23
2.6 本書不包括什么24
2.7 如果在本書中發(fā)現(xiàn)錯誤該怎么辦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代碼中的常見問題41
3.7 格式化Go代碼43
3.8 小結(jié)44
第4章 基本類型、值和指針45
4.1 為本章做準(zhǔn)備46
4.2 使用Go語言標(biāo)準(zhǔn)庫46
4.3 了解基本數(shù)據(jù)類型48
4.4 使用常量49
4.5 使用變量52
4.6 使用空白標(biāo)識符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語句91
6.4 使用for循環(huán)96
6.5 使用switch語句102
6.6 使用標(biāo)簽語句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 定義簡單函數(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ù)文字語法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語言如何執(zhí)行代碼271
14.3 創(chuàng)建額外的goroutine272
14.4 從goroutine返回結(jié)果276
14.5 使用通道280
14.6 使用select語句293
14.7 小結(jié)300
第15章 錯誤處理301
15.1 為本章做準(zhǔn)備302
15.2 處理可恢復(fù)的錯誤303
15.3 處理不可恢復(fù)的錯誤309
15.4 小結(jié)316
第二部分 使用Go語言標(biāo)準(zhǔn)庫
第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 書寫字符串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章 日期、時間和時長377
19.1 為本章做準(zhǔn)備378
19.2 使用日期和時間378
19.3 goroutine和通道的時間特性392
19.4 小結(jié)399
第20章 讀取和寫入數(shù)據(jù)400
20.1 為本章做準(zhǔn)備401
20.2 了解讀取器和書寫器402
20.3 為讀取器和書寫器使用工具
函數(shù)405
20.4 使用專門的讀取器和書寫器406
20.5 緩沖數(shù)據(jù)412
20.6 用讀取器和書寫器格式化和
掃描數(shù)據(jù)419
20.7 小結(jié)422
第21章 使用JSON數(shù)據(jù)423
21.1 為本章做準(zhǔn)備424
21.2 讀取和寫入JSON數(shù)據(jù)424
21.3 小結(jié)443
第22章 使用文件444
22.1 為本章做準(zhǔn)備445
22.2 讀取文件446
22.3 將數(shù)據(jù)寫入文件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)建簡單的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請求524
25.3 配置HTTP客戶端請求530
25.4 創(chuàng)建多部分表單540
25.5 小結(jié)543
第26章 使用數(shù)據(jù)庫544
26.1 為本章做準(zhǔn)備545
26.2 安裝數(shù)據(jù)庫驅(qū)動程序547
26.3 打開數(shù)據(jù)庫547
26.4 執(zhí)行語句和查詢549
26.5 使用預(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 識別類型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 從多個通道中選擇接收637
29.10 小結(jié)639
第30章 協(xié)調(diào)goroutine640
30.1 為本章做準(zhǔn)備641
30.2 使用等待組641
30.3 使用互斥644
30.4 使用條件來協(xié)調(diào)goroutine649
30.5 確保函數(shù)僅執(zhí)行一次652
30.6 使用Context654
30.7 小結(jié)660
第31章 單元測試、基準(zhǔn)測試和日志661
31.1 為本章做準(zhǔn)備661
31.2 使用測試662
31.3 基準(zhǔn)代碼669
31.4 寫日志673
31.5 小結(jié)676
第三部分 應(yīng)用Go語言
第32章 創(chuàng)建Web平臺678
32.1 創(chuàng)建項(xiàng)目678
32.2 創(chuàng)建一些基本的平臺功能679
32.3 通過依賴注入管理服務(wù)687
32.4 小結(jié)698
第33章 中間件、模板和處理程序699
33.1 創(chuàng)建請求處理流水線699
33.2 創(chuàng)建HTML響應(yīng)713
33.3 引入請求處理程序719
33.4 小結(jié)729
第34章 操作、會話和授權(quán)730
34.1 引入操作結(jié)果730
34.2 在模板中調(diào)用請求處理程序735
34.3 從路由中生成URL741
34.4 定義別名路由745
34.5 驗(yàn)證請求數(shù)據(jù)747
34.6 添加會話753
34.7 添加用戶授權(quán)功能759
34.8 小結(jié)770
第35章 SportsStore:一個真正的
應(yīng)用程序771
35.1 創(chuàng)建SportsStore項(xiàng)目771
35.2 啟動數(shù)據(jù)模型773
35.3 顯示產(chǎn)品列表776
35.4 添加分頁779
35.5 為模板內(nèi)容添加樣式782
35.6 添加類別過濾支持784
35.7 小結(jié)790
第36章 SportsStore:購物車和
數(shù)據(jù)庫791
36.1 構(gòu)建購物車791
36.2 使用數(shù)據(jù)庫存儲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 限制對管理功能的訪問848
38.3 創(chuàng)建Web服務(wù)854
38.4 準(zhǔn)備部署856
38.5 小結(jié)860