Go Web 編程 (Go Web Programming)
內容描述
本書全面介紹使用Go語言開發Web應用所需的全部基本概念,並詳細講解如何運用現代設計原則使用Go語言構建Web應用。本書通過大量的實例介紹核心概念(如處理請求和發送響應、模板引擎和數據持久化),並深入討論更多高級主題(如並發、Web應用程序測試以及部署到標準系統服務器和PaaS提供商)。
本書以一個網絡論壇為例,講解如何使用請求處理器、多路復用器、模板引擎、存儲系統等核心組件構建一個Go Web應用,然後在這一應用的基礎上,構建出相應的Web服務。值得一提的是,本書在介紹Go Web開發方法時,基本上只用到Go語言自帶的標準庫,而不會用到任何特定的Web框架,讀者學到的知識將不會局限於特定的框架,即使將來需要用到現成的框架或者自行構建框架,仍然會從本書中獲益。本書除了講解具體的Web開發方法,還介紹如何對Go Web應用進行測試,如何使用Go的並發特性提高Web應用的性能,以及如何在Heroku、Google App Engine、Digital Ocean等雲平臺上部署Go Web應用;此外,書中還傳授一些Go Web開發方面的經驗和提示。這些重要的實踐知識將幫助讀者快速成為真正具有生產力的Go Web開發者。
閱讀本書需要讀者具備基本的Go語言編程技能並掌握Go語言的語法。本書適合所有想用Go語言進行Web開發的讀者閱讀,無論是Web開發的初學者還是入行已久的開發者都會在閱讀本書的過程中有所收獲。
目錄大綱
第一部分Go與Web應用
第1章Go與Web應用3
1.1使用Go語言構建Web應用3
1.1.1 Go與可擴展Web應用4
1.1.2 Go與模塊化Web應用4
1.1.3 Go與可維護的Web應用5
1.1.4 Go與高性能Web應用5
1.2 Web應用的工作原理6
1.3 HTTP簡介7
1.4 Web應用的誕生8
1.5 HTTP請求9
1.5.1請求方法10
1.5.2安全的請求方法11
1.5. 3冪等的請求方法11
1.5.4瀏覽器對請求方法的支持11
1.5.5請求首部12
1.6 HTTP響應13
1.6.1響應狀態碼13
1.6.2響應首部14
1.7 URI 15
1.8 HTTP/2簡介16
1.9 Web應用的各個組成部分16
1.9.1處理器17
1.9.2模板引擎18
1.10 Hello Go 18
1.11小結21
第2章ChitChat論壇23
2.1 ChitChat簡介23
2.2應用設計24
2.3數據模型26
2.4請求的接收與處理27
2.4.1多路復用器27
2.4.2服務靜態文件29
2.4.3創建處理器函數29
2.4.4使用cookie進行訪問控制30
2.5使用模板生成HTML響應33
2.6安裝PostgreSQL 38
2.6.1在Linux或FreeBSD系統上安裝38
2.6.2在Mac OS X系統上安裝39
2.6.3在Windows系統上安裝39
2.7連接數據庫39
2.8啟動服務器44
2.9 Web應用運作流程回顧45
2.10小結46
第二部分Web應用的基本組成部分
第3章接收請求49
3.1 Go的net/http標準庫49
3.2使用Go構建服務器51
3.2.1 Go Web服務器51
3.2.2通過HTTPS提供服務53
3.3處理器和處理器函數56
3.3.1處理請求56
3.3.2使用多個處理器58
3.3.3處理器函數59
3.3.4串聯多個處理器和處理器函數61
3.3.5 ServeMux和DefaultServeMux 65
3.3 .6使用其他多路復用器66
3.4使用HTTP/2 68
3.5小結70
第4章處理請求72
4.1請求和響應72
4.1.1 Request結構73
4.1.2請求URL 73
4.1.3請求首部74
4.1.4請求主體76
4.2 Go與HTML表單77
4.2.1 Form字段79
4.2.2 PostForm字段80
4.2.3 MultipartForm字段81
4.2.4文件83
4.2.5處理帶有JSON主體的POST請求85
4.3 ResponseWriter 86
4.4 cookie 91
4.4.1 Go與cookie 91
4.4. 2將cookie發送到瀏覽器92
4.4.3從瀏覽器裡面獲取cookie 94
4.4.4使用cookie實現閃現消息96
4.5小結99
第5章內容展示100
5.1模板引擎100
5.2 Go的模板引擎102
5.2.1對模板進行語法分析104
5.2.2執行模板105
5.3動作106
5.3.1條件動作106
5.3.2迭代動作108
5.3.3設置動作109
5.3.4包含動作111
5.4參數、變量和管道113
5.5函數114
5.6上下文感知116
5.6.1防禦XSS攻擊119
5.6.2不對HTML進行轉義121
5.7嵌套模板122
5.8通過塊動作定義默認模板126
5.9小結127
第6章存儲數據128
6.1內存存儲128
6.2文件存儲131
6.2.1讀取和寫入CSV文件133
6.2.2 gob包135
6.3 Go與SQL 137
6.3.1設置數據庫138
6.3.2連接數據庫140
6.3.3創建帖子142
6.3.4獲取帖子144
6.3.5更新帖子145
6.3.6刪除帖子145
6.3.7一次獲取多篇帖子146
6.4 Go與SQL的關係147
6.4.1設置數據庫147
6.4.2一對多關係150
6.5 Go與關係映射器152
6.5.1 Sqlx 152
6.5.2 Gorm 154
6.6小結157
第三部分實戰演練
第7章Go Web服務161
7.1 Web服務簡介161
7.2基於SOAP的Web服務簡介163
7.3基於REST的Web服務簡介166
7.3.1將動作轉換為資源168
7.3.2將動作轉換為資源的屬性169
7.4通過Go分析和創建XML 169
7.4 .1分析XML 169
7.4.2創建XML 177
7.5通過Go分析和創建JSON 180
7.5.1分析JSON 181
7.5.2創建JSON 184
7.6創建Go Web服務187
7.7小結194
第8章應用測試196
8.1 Go與測試196
8.2使用Go進行單元測試197
8.2.1跳過測試用例201
8.2.2以並行方式運行測試202
8.2.3基準測試203
8.3使用Go進行HTTP測試206
8.4測試替身以及依賴注入210
8.5第三方Go測試庫217
8.5.1 Gocheck測試包簡介217
8.5.2 Ginkgo測試框架簡介223
8.6小結228
第9章發揮Go的並發優勢230
9.1並發與並行的區別230
9.2 goroutine 232
9.2.1使用goroutine 232
9.2.2 goroutine與性能235
9.2.3等待goroutine 238
9.3通道239
9.3.1通過通道實現同步240
9.3.2通過通道實現消息傳遞242
9.3.3有緩衝通道243
9.3.4從多個通道中選擇244
9.4在Web應用中使用並發247
9.4.1創建馬賽克圖片248
9.4.2馬賽克圖片Web應用251
9.4.3並發版馬賽克圖片生成Web應用254
9.5小結262
第10章Go的部署263
10.1將應用部署到獨立的服務器264
10.2將應用部署到Heroku 270
10.3將應用部署到Google App Engine 273
10.4將應用部署到Docker 278
10.4.1什麼是Docker 278
10.4.2安裝Docker 279
10.4.3 Docker的理念與組件280
10.4.4 Docker化一個Go Web應用281
10.4.5將Docker容器推送到互聯網283
10.5部署方法之間的對比286
10.6小結287
附錄安裝和設置Go 288
作者介紹
作者:[新加坡]鄭兆雄(Sau Sheong Chang)譯者:黃健宏
作者簡介
Sau Sheong Chang既是新加坡能源有限公司的數字技術總裁,也是Ruby社區以及Go社區的活躍貢獻者,著有《Go Web編程》《R和Ruby數據分析之旅》等4部著作。
譯者簡介
黃健宏(huangz),一位1990年出生的計算機技術圖書作譯者,《Redis設計與實現》一書的作者,《Redis實戰》一書的譯者。除了已出版的兩本作品之外,他還創作和翻譯了《Go標準庫中文文檔》《Redis命令參考》《SICP解題集》等一系列開源文檔。