- 産品名稱:Go Web 編程
- 是否是套裝: 否
- 書名: Go Web 編程
- 定價: 79.00元
- 齣版社名稱: 人民郵電齣版社
- 作者: 鄭兆雄
- 書名: GO WEB 編程
- ISBN編號: 9787115322470
目錄
DIYI部分 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 簡介 7
1.4 Web應用的誕生 8
1.5 請求 9
1.5.1 請求方法 10
1.5.2 安全的請求方法 11
1.5.3 冪等的請求方法 11
1.5.4 瀏覽器對請求方法的支持 11
1.5.5 請求首部 12
1.6 響應 13
1.6.1 響應狀態碼 13
1.6.2 響應首部 14
1.7 URI 15
1.8 /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的/標準庫 49
3.2 使用Go構建服務器 51
3.2.1 Go Web服務器 51
3.2.2 通過S提供服務 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 使用/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進行測試 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
內容介紹
本書全麵介紹使用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開發的初學者還是入行已久的開發者都會在閱讀本書的過程中有所收獲。
作者介紹
作者簡介 Sau Sheong Chang 既是新加坡能源有限公司的數字技術總裁,也是Ruby 社區以及Go社區的活躍貢獻者,著有《Go Web編程》《R和Ruby數據分析之旅》等4 部著作。 譯者簡介 黃健宏(huangz),一位1990年齣生的計算機技術圖書作譯者,《Redis設計與實現》一書的作者,《Redis實戰》一書的譯者。除瞭已齣版的兩本作品之外,他還創作和翻譯瞭《Go標準庫中文文檔》《Redis命令參考》《SICP解題集》等一係列開源文檔。要瞭解關於黃健宏的更多信息,請訪問他的個人主頁huangz.me。
關聯推薦
無論是經驗老到的gopher,還是剛開始接觸Go語言的Web開發者,這都是必不可少的一本書,本書囊括瞭關於Go Web應用的開發和部署的全部知識
深入理解並發與網絡編程:下一代係統構建指南 本書聚焦於現代軟件開發中的兩大核心挑戰:高效的並發處理和健壯的網絡通信。它並非一本麵嚮初學者的語言基礎教程,而是為那些已經掌握瞭至少一門主流編程語言(如 C++、Java 或 Python)並希望進入高性能、高並發係統設計領域的專業人士量身打造的進階讀物。 第一部分:並發模型的深度剖析與實踐 在當今多核處理器成為常態的計算環境中,如何有效地利用並行性是衡量係統性能的關鍵。本書將係統地解構不同並發範式背後的理論基礎和工程實踐,避免瞭對任何特定語言特性的簡單羅列,而是側重於思想和模式的通用性。 1. 共享內存模型與同步原語的陷阱: 我們首先迴顧經典的並發模型——基於共享內存的綫程同步。這不是簡單地介紹互斥鎖(Mutex)和條件變量,而是深入探討內存屏障(Memory Barriers)的底層工作原理,以及現代處理器亂序執行對並發程序的隱性影響。我們將分析“可見性”和“順序性”的保證,並提供案例來揭示在缺乏嚴格同步機製下,數據競爭的微妙錶現形式,例如僞共享(False Sharing)問題在緩存一緻性協議(如 MESI 協議)中的體現,以及如何通過緩存行對齊(Cache Line Alignment)來優化性能。 2. 消息傳遞範式:Actor 與 CSP 理論的交鋒: 本書將重點探討更安全、更易於推理的並發設計——消息傳遞模型。 Actor 模型(麵嚮對象並發): 我們將分析 Actor 模型的數學基礎,探討其在分布式係統中的優勢,特彆是其如何自然地處理狀態隔離和故障容錯。內容將涉及如何設計一個健壯的 Actor 框架,包括消息隊列的深度實現(如無鎖隊列和界限緩衝隊列)以及死信隊列(Dead Letter Queue, DLQ)的處理策略。 Communicating Sequential Processes (CSP) 模型: 我們將深入探究 CSP 模型的理論基礎,它如何通過通道(Channels)來協調進程間的交互。本書不會停留在錶麵概念,而是會構建一個輕量級的、基於事件驅動的調度器,以模擬 CSP 運行時環境,討論選擇(Select)操作在處理多路輸入時的效率和阻塞特性。 3. 現代並發的優化策略:無鎖數據結構與原子操作: 對於性能敏感的場景,鎖的開銷往往是瓶頸。本部分將全麵介紹如何利用硬件提供的原子操作(Atomic Operations)來構建高性能的數據結構。我們將詳細講解比較並交換(CAS, Compare-And-Swap)操作的機製,並指導讀者如何從零開始實現一個健壯的無鎖堆棧(Stack)和無鎖隊列(Queue),並使用基準測試工具嚴格評估其在不同並發負載下的錶現,對比其與傳統鎖結構的性能差異。 --- 第二部分:高性能網絡編程與協議棧解析 現代應用幾乎無一例外地依賴於網絡。本書專注於如何構建能夠處理海量連接和高吞吐量數據的網絡服務,涵蓋從操作係統內核到應用層協議的全景視圖。 1. 操作係統網絡 I/O 模型的演進: 我們不會簡單地介紹阻塞 I/O 和非阻塞 I/O,而是聚焦於內核層麵的高效 I/O 多路復用技術。 I/O 多路復用的深入比較: 詳細分析 `select/poll` 的局限性,並重點剖析 `epoll` (Linux) 和 `kqueue` (BSD/macOS) 的內部實現機製。內容將包括事件通知模型(邊緣觸發與水平觸發的區彆)以及如何設計一個高效的事件分發器,以最小化上下文切換和係統調用開銷。 異步 I/O (AIO) 的權衡: 探討真正的異步 I/O 模型(如 Linux 的 `io_uring`),分析其在用戶空間和內核空間之間數據傳輸的開銷,以及它如何解決傳統 I/O 模型的“驚群效應”(Thundering Herd Problem)。 2. 傳輸層協議的深度調優: TCP 協議是絕大多數可靠網絡應用的基礎。本書提供瞭一套係統化的 TCP 調優手冊,超越瞭簡單的係統參數修改。 擁塞控製算法的實戰應用: 分析 Cubic、BBR 等主流擁塞控製算法的工作原理。讀者將學習如何根據自身服務的網絡環境(如高延遲、高帶寬或丟包率高的環境)選擇或定製最閤適的擁塞控製策略。 TCP 連接管理與性能陷阱: 深入解析 TCP 慢啓動、擁塞避免階段的動態變化。重點剖析 TIME_WAIT 狀態的資源占用問題,以及如何通過 SO_REUSEPORT 等機製來優化高並發服務器的端口復用。 3. 應用層協議設計與序列化: 在構建分布式係統時,選擇高效的通信協議至關重要。 RPC 框架的底層實現: 本部分詳細拆解遠程過程調用(RPC)框架的核心組件,包括服務發現、請求路由和負載均衡策略。我們將關注編碼/解碼(Serialization/Deserialization)的性能瓶頸,並對比 JSON、Protocol Buffers 和 FlatBuffers 等序列化技術在空間效率、解析速度和嚮前/嚮後兼容性方麵的優劣。 構建高效的基於流的協議: 討論如何設計具有清晰界定符或長度前綴的自定義流式協議,以確保數據在不可靠網絡上傳輸時的完整性和順序性,這是構建高性能網關和代理服務的基礎。 --- 目標讀者與先決條件 本書假定讀者具備: 1. 紮實的計算機科學基礎,熟悉操作係統(進程、綫程、內存管理)和數據結構原理。 2. 對網絡基礎(TCP/IP 協議棧)有清晰的理解。 3. 熟悉至少一種麵嚮對象的或係統級編程語言(如 C++ 或 Rust),並對性能優化有強烈的興趣。 閱讀本書,您將能夠從“如何使用”提升到“如何設計和實現”的層麵,構建齣下一代具備高並發、低延遲特性的復雜軟件係統。