具體描述
編輯推薦
Go語言通過提供整潔快速的編譯代碼、垃圾迴收、簡單的並發Go模型以及豐富的標準庫來滿足人們對於可擴展、高性能Web 應用的需求,這種語言非常適用於編寫微服務,又或者用於構建可擴展且可維護的係統。
本書將教讀者運用現代化設計理念構建Go Web應用的方法。閱讀本書能讓讀者學會如何通過依賴注入設計模式來編寫測試替身,如何在Web應用中使用並發特性,還有如何在Web服務中創建以及處理JSON數據和XML數據。除此之外,讀者還將學會如何盡可能地減少應用對外部框架的依賴,並瞭解大量與應用測試以及應用部署有關的有價值的生産技術。
本書主要內容
● 基礎知識。
● 功能測試和基準測試。
● 並發特性的使用方法。
● 將應用部署到獨立服務器、PaaS雲端以及 Docker 的方法。
● 大量提示、竅門以及技巧。
本書假設讀者熟悉Go語言的基本語法並瞭解Web 開發的一般概念。 內容簡介
本書全麵介紹使用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解題集》等一係列開源文檔。要瞭解關於黃健宏的更多信息,請訪問他的個人主頁http://huangz.me。 目錄
第一部分 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
《現代 Web 開發實戰:從前端到後端,打造高性能應用》 一、 擁抱全棧,駕馭互聯網時代的核心競爭力 互聯網的浪潮從未停歇,而 Web 開發,正是這股浪潮中最核心的驅動力之一。從最初的靜態頁麵展示,到如今功能豐富、交互流暢的動態應用,Web 開發的邊界不斷拓展,其重要性也日益凸顯。無論你是希望構建一個引人入勝的個人博客,還是打造一個功能強大的電商平颱,抑或是開發一個能夠服務韆萬用戶的 SaaS 産品,《現代 Web 開發實戰:從前端到後端,打造高性能應用》都將是你不可或缺的指南。 本書並非零散的技術堆砌,而是以係統化的視角,帶領讀者深入理解現代 Web 開發的各個環節。我們將從最基礎的前端交互原理齣發,逐步深入到復雜的後端服務構建,再到最終的部署優化,力求為讀者構建一個全麵而紮實的 Web 開發知識體係。在信息爆炸的時代,掌握一門能夠讓你從想法到實現的完整技術棧,無疑是擁有核心競爭力的關鍵。本書正是為瞭幫助你實現這一目標而生。 二、 前端之魅:構建引人入勝的用戶體驗 一個優秀的 Web 應用,離不開用戶眼前所見的精彩。本書的前端部分,將帶你走進 HTML、CSS 和 JavaScript 的核心世界,並在此基礎上,探索現代前端開發的主流框架和工具。 HTML5 與 CSS3:骨骼與靈魂的塑造 我們不再僅僅停留在標簽的堆砌,而是深入理解語義化 HTML 的優勢,以及如何利用 HTML5 的新特性(如 Canvas、SVG、Web Components)構建更富錶現力的內容。CSS3 更是提供瞭強大的樣式控製能力,我們將學習 Flexbox、Grid 布局,掌握響應式設計的精髓,讓你的網站在任何設備上都能呈現最佳視覺效果。更重要的是,我們將探索 CSS 預處理器(如 Sass/Less)和 CSS-in-JS 等技術,提升樣式管理的效率和可維護性。 JavaScript:點亮交互的火花 JavaScript 是 Web 前端的靈魂。我們將從 ES6+ 的現代語法特性入手,深入理解異步編程(Promises、Async/Await)、模塊化開發,以及常用的 DOM 操作和事件處理。為瞭應對日益復雜的單頁應用(SPA)開發需求,本書將重點講解主流前端框架的原理和實踐。 主流前端框架精講(以 React/Vue 為例) 選擇一個優秀的前端框架,能夠極大地提升開發效率和應用性能。我們將深入剖析 React 或 Vue 的核心概念,包括組件化開發、狀態管理、路由機製、虛擬 DOM 原理等。通過豐富的實戰案例,學習如何構建可復用的 UI 組件,管理復雜的應用狀態,實現高效的路由切換,並掌握數據請求和響應的處理。我們還將介紹它們生態係統中重要的周邊庫,如狀態管理庫(Redux/Vuex)、路由庫(React Router/Vue Router),以及 UI 組件庫等,幫助你構建齣功能完備、體驗流暢的單頁應用。 性能優化與工程化 前端性能是用戶體驗的基石。本書將詳細講解前端性能優化的常見策略,包括代碼分割、懶加載、圖片優化、緩存策略等。同時,我們將觸及前端工程化的概念,瞭解 Webpack/Vite 等構建工具的使用,掌握代碼打包、壓縮、優化等流程,並學習如何進行單元測試和 E2E 測試,確保應用的質量。 三、 後端驅動:構建堅實的業務邏輯與數據支撐 前端的美麗離不開後端的強大支撐。本書的後端部分,將帶你走進服務器端的世界,學習如何設計、開發和部署高性能、可擴展的 Web 服務。 選擇你的後端語言與框架:效率與靈活性的權衡 我們將探討多種主流的後端技術棧,並選擇其中一個(例如 Go, Node.js/Express, Python/Django/Flask, Java/Spring Boot 等)進行深入講解。這部分的內容會側重於框架的生命周期、路由匹配、中間件機製、請求/響應處理、模闆引擎、數據庫集成等方麵。例如,如果選擇 Go,我們將深入理解 Goroutines 和 Channels 的並發模型,以及其在 Web 服務中的應用;如果選擇 Node.js,我們會關注其事件驅動、非阻塞 I/O 的特性,以及如何利用 Express/Koa 等框架構建 RESTful API。 構建 RESTful API:數據交互的通用語言 RESTful API 是現代 Web 服務通信的基石。我們將學習如何設計清晰、規範的 API 接口,掌握 HTTP 請求方法(GET, POST, PUT, DELETE)的正確使用,理解狀態碼的含義,以及如何進行請求參數的校驗和響應數據的格式化。本書將通過實例演示,教你如何構建符閤 RESTful 風格的 CRUD (Create, Read, Update, Delete) 操作。 數據庫集成:數據的存儲與管理 數據是 Web 應用的生命綫。我們將深入學習關係型數據庫(如 PostgreSQL, MySQL)和非關係型數據庫(如 MongoDB, Redis)的基本原理和 SQL 語言。在後端框架中,我們將學習 ORM (Object-Relational Mapping) 的使用,簡化數據庫操作,並探討數據庫連接池、事務管理、索引優化等提高數據庫訪問性能的策略。對於需要緩存和實時性的場景,我們還將介紹 Redis 的常用數據結構和應用。 身份驗證與授權:保障應用安全 安全性是 Web 應用不可忽視的環節。我們將學習多種身份驗證機製,包括基於 Session 的認證、基於 Token 的認證(如 JWT),以及 OAuth2 協議的應用。同時,我們將深入理解授權的概念,學習如何實現不同用戶角色的權限控製,確保敏感數據的安全訪問。 緩存與消息隊列:提升係統吞吐量 隨著用戶量的增長,係統的吞吐量和響應速度將成為瓶頸。我們將學習如何利用 Redis 等內存數據庫實現數據緩存,減少數據庫壓力。對於需要異步處理、解耦服務、削峰填榖的場景,我們將引入消息隊列(如 RabbitMQ, Kafka)的概念和應用,學習如何設計基於消息隊列的分布式係統架構。 四、 DevOps 實踐:從開發到部署的自動化流程 一個完整的 Web 應用生命周期,離不開高效的部署和持續的運維。本書的 DevOps 部分,將幫助你掌握自動化部署、監控和維護的必備技能。 容器化技術:Docker 的強大威力 Docker 已經成為現代應用部署的事實標準。我們將深入理解容器的概念,學習如何編寫 Dockerfile,構建應用程序的鏡像,並掌握 Docker Compose 的使用,輕鬆編排和管理多容器應用。通過容器化,我們可以實現環境的一緻性,簡化開發、測試和生産環境的部署流程。 持續集成與持續部署 (CI/CD):加速迭代,提升質量 CI/CD 是現代軟件開發的核心實踐。我們將學習如何利用 Jenkins, GitHub Actions, GitLab CI 等工具,搭建自動化的構建、測試和部署流水綫。從代碼提交到應用上綫,每一個環節都實現自動化,大幅縮短開發周期,並減少人為錯誤。 雲原生與部署策略:擁抱彈性與可用性 我們將介紹主流的雲平颱(如 AWS, Azure, GCP)提供的 Web 應用托管服務。學習如何將應用部署到雲端,掌握彈性伸縮、負載均衡、服務發現等關鍵概念。探討藍綠部署、滾動更新等高級部署策略,確保應用在升級過程中仍能保持高可用性。 監控與日誌:掌握應用運行狀態 “看不見的係統,就等於不存在的係統。” 本書將介紹 Prometheus, Grafana 等監控工具的使用,幫助你收集和展示關鍵的係統指標(CPU、內存、網絡流量、請求延遲等)。同時,我們將學習如何集中管理和分析應用日誌(如 ELK Stack),快速定位和解決生産環境中的問題。 五、 架構設計與最佳實踐:構建可維護、可擴展的係統 隨著應用的復雜度和規模不斷增長,良好的架構設計顯得尤為重要。 微服務架構 vs. 單體架構 我們將探討兩種常見的應用架構模式,分析它們的優缺點,以及在不同場景下的適用性。學習如何根據業務需求選擇閤適的架構。 設計模式與重構 我們將介紹一些在 Web 開發中常用的設計模式,如工廠模式、單例模式、觀察者模式等,以及它們如何幫助我們編寫更優雅、可維護的代碼。同時,我們將學習如何進行代碼重構,不斷優化現有代碼結構,提高代碼質量。 性能調優與故障排查 本書將貫穿性能調優的理念,並提供一套係統性的故障排查方法論,幫助開發者在麵對復雜問題時,能夠快速定位根源,並找到有效的解決方案。 六、 學習路徑與進階展望 《現代 Web 開發實戰:從前端到後端,打造高性能應用》旨在為你提供一個紮實的基礎,並引領你走嚮更廣闊的 Web 開發領域。無論你是初學者,希望係統地學習 Web 開發的方方麵麵;還是有一定經驗的開發者,希望鞏固知識、拓展技能,本書都將為你提供寶貴的價值。 學完本書,你將能夠獨立完成一個從零開始的 Web 應用開發,並具備構建高性能、可擴展、安全可靠的 Web 服務的核心能力。更重要的是,你將獲得一種解決問題的思維方式,以及不斷學習和適應新技術的能力,這在快速變化的互聯網時代尤為寶貴。 未來,你還可以沿著本書的指引,深入研究更高級的主題,如區塊鏈、人工智能在 Web 中的應用、Serverless 架構、GraphQL 等,不斷拓展你的技術邊界,成為一名優秀的現代 Web 開發者。 本書的目標讀者: 希望從零開始係統學習 Web 開發的初學者。 有一定 Web 開發經驗,但希望夯實基礎、拓展技能的開發者。 希望掌握全棧開發能力,實現從前端到後端的端到端開發的工程師。 對構建高性能、可擴展 Web 應用感興趣的架構師和技術負責人。 開始你的 Web 開發之旅吧!《現代 Web 開發實戰:從前端到後端,打造高性能應用》將是你最忠實的夥伴。